熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java通用權限控制算法

2022-06-13   來源: Java核心技術 

  一種常用的權限控制算法的實現參考LINUX/UNIX權限編碼

  這裡筆者介紹一種很常用也比較專業的權限控制思路

  要換成其他的語言主自己轉一下就可以了

  這裡用java語言描述其實都差不多的

  為了方便起見我們這裡定義a^b為a的b次方

  這裡我們為每一個操作設定一個唯一的整數值比如

  刪除A---

  修改A---

  添加A---

  刪除B---

  修改B---

  添加B---

  ……

  理論上可以有N個操作這取決於你用於儲存用戶權限值的數據類型了

  如果用戶有權限

  添加A---

  刪除B---

  修改B---

  那用戶的權限值 purview =^+^+^就是的權的和化成二進制可以表示為

  這樣如果要驗證用戶是否有刪除B的權限就可以通過位與運算來實現

  在JAvA裡位與運算運算符號為&即是

  int value = purview &((int)Mathpow());

  你會發現當用戶有操作權限時運算出來的結果都會等於這個操作需要的權限值!

  原理

  位與運算顧名思義就是對位進行與運算

  以上面的式子為例purview & ^ 也就是 &

  將它們化成二進制有

  

  &

  

   == (十進制) == ^

  同理如果要驗證是否有刪除A---的權限

  可以用purview &((int)Mathpow());

  即

  

  &

  

   == (十進制)  != ^

  這種算法的一個優點是速度快

  可以同時處理N個權限

  如果想驗證是否同時有刪除A---和刪除B---的權限可以用

  purview&(^+^)==(^+^)?true:false;

  設置多角色用戶根據權限值判斷用戶的角色

  下面提供一個java的單操作權限判斷的代碼

  //userPurview是用戶具有的總權限

  //optPurview是一個操作要求的權限為一個整數(沒有經過權的!)

  public static boolean checkPower(int userPurview int optPurview)

  {

  int purviewValue = (int)Mathpow( optPurview);

  return (userPurview & purviewValue) == purviewValue;

  }

  當然多權限的驗證只要擴展一下就可以了

  幾點注意事項

  首先一個系統可能有很多的操作

  因此請建立數據字典以便查閱修改時使用

  其次如果用數據庫儲存用戶權限請注意數值的有效范圍

  操作權限值請用唯一的整數!

  public class Limits {

  /**

  * 常規信息下發

  */

  public static final int CGXX_XF = ;

  /**

  * 常規信息列表

  */

  public static final int CGXX_LB = ;

  /**

  * 常規信息審核

  */

  public static final int CGXX_SH = ;

  /**

  * 包月用戶查看

  */

  public static final int BYYH_CK = ;

  /**

  * 違章點播統計

  */

  public static final int WZDB_TJ = ;

  /**

  * 定制提取詳細

  */

  public static final int DZTQ_XX = ;

  /**

  * 請求記錄

  */

  public static final int QQJL = ;

  /**

  * 管理員權限

  */

  public static final int GLY_QX = ;

  /**

  * 驗證權限

  * @param limitsSum 權限總和 權限總和 為每個權限的次方相加

  * @param checkInt 具體權限

  * @return

  */

  public static boolean checkLimits(int limitsSum int checkInt){

  return (limitsSum & ( << checkInt)) > ;

  }

  /**

  * 生成權限總值

  * @param limits

  * @return

  */

  public static int createLimits(String[] limits){

  int limitsSum = ;

  for (int i = ; i < limitslength; i++) {

  limitsSum += ( << IntegerparseInt(limits[i]));

  }

  return limitsSum;

  }

  }


From:http://tw.wingwit.com/Article/program/Java/hx/201311/25604.html
  • 上一篇文章:

  • 下一篇文章:
  • 推薦文章
    Copyright © 2005-2022 電腦知識網 Computer Knowledge   All rights reserved.