<delect id="sj01t"></delect>
  1. <em id="sj01t"><label id="sj01t"></label></em>
  2. <div id="sj01t"></div>
    1. <em id="sj01t"></em>

            <div id="sj01t"></div>

            Java通用權限控制的算法

            時間:2024-06-07 05:24:25 ACCP培訓 我要投稿
            • 相關推薦

            關于Java通用權限控制的算法

              一種常用的權限控制算法的實現,參考LINUX/UNIX權限編碼,具體內容是怎么樣的?一起和小編學習學習吧!

              這里用java語言描述,其實都差不多的。

              為了方便起見,我們這里定義a^b為:a的b次方。

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

              刪除A---0

              修改A---1

              添加A---2

              刪除B---3

              修改B---4

              添加B---5

              ……

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

              如果用戶有權限:

              添加A---2;

              刪除B---3;

              修改B---4。

              那用戶的權限值 purview =2^2+2^3+2^4=28,就是2的權的和。化成二進制可以表示為11100。

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

              在JAvA里,位與運算運算符號為&,即是:

              int value = purview &((int)Math.pow(2,3));

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

              原理:

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

              以上面的式子為例:purview & 2^3 也就是 28&8

              將它們化成二進制有

              11100

              & 01000

              -------------------

              01000 == 8(十進制) == 2^3

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

              可以用:purview &((int)Math.pow(2,0));

              即:

              11100

              & 00001

              ------------------------

              00000 == 0(十進制)  != 2^0

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

              可以同時處理N個權限。

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

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

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

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

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

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

              public static boolean checkPower(int userPurview, int optPurview)

              {

              int purviewValue = (int)Math.pow(2, optPurview);

              return (userPurview & purviewValue) == purviewValue;

              }

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

              幾點注意事項:

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

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

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

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

              public class Limits {

              /**

              * 常規信息下發

              */

              public static final int CGXX_XF = 0;

              /**

              * 常規信息列表

              */

              public static final int CGXX_LB = 1;

              /**

              * 常規信息審核

              */

              public static final int CGXX_SH = 2;

              /**

              * 包月用戶查看

              */

              public static final int BYYH_CK = 3;

              /**

              * 違章點播統計

              */

              public static final int WZDB_TJ = 4;

              /**

              * 定制提取詳細

              */

              public static final int DZTQ_XX = 5;

              /**

              * 請求記錄

              */

              public static final int QQJL = 6;

              /**

              * 管理員權限

              */

              public static final int GLY_QX = 7;

              /**

              * 驗證權限

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

              * @param checkInt 具體權限

              * @return

              */

              public static boolean checkLimits(int limitsSum, int checkInt){

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

              }

              /**

              * 生成權限總值

              * @param limits

              * @return

              */

              public static int createLimits(String[] limits){

              int limitsSum = 0;

              for (int i = 0; i < limits.length; i++) {

              limitsSum += (1 << Integer.parseInt(limits[i]));

              }

              return limitsSum;

              }

            【Java通用權限控制的算法】相關文章:

            Java認證輔導:Java實現二叉樹遍歷算法10-21

            Java語言中的流程控制07-09

            JAVA認證基礎知識:近似算法(格雷厄姆算法)簡介10-29

            JAVA垃圾收集算法與內存泄露的解決方法10-16

            RBAC打造通用Web權限08-19

            Linux文件權限詳解06-27

            如何開通淘寶直播權限07-28

            Linux權限管理基本方法10-24

            Java與Java web的區別08-10

            著作權限制的合理使用07-15

            <delect id="sj01t"></delect>
            1. <em id="sj01t"><label id="sj01t"></label></em>
            2. <div id="sj01t"></div>
              1. <em id="sj01t"></em>

                      <div id="sj01t"></div>
                      黄色视频在线观看