注解式功能權限控制機制


  1. 權限定義表:  定義一個SysUser.GetAclMap 的方法, 返回的是[{code,name}, {code2,name2} ...] 的json結構。
    在功能權限中, code對應url, 而name則是當前用戶是否擁有權限: null 沒有; Y 有權限.
  2. 在Controller中配置Authorize注解, 可以在class上定義, 也可以在action中定義
    通過order控件校驗順序
  3. 通過actionKey指定
  4. 權限驗證方式:
    1. 驗證當前ActionKey是否存在於“權限定義表”    (ContainsKey)
      1. --Yes , 判斷權限定義表中, 用戶授權值(get): null  (未授權),或者not null (已授權)
      2. -- No,  認定為無需校驗項, 返回 (已授權)
    2. 如果Action未定義Authorize注解, 則向上使用Controller上的Authorize注解定義。
    3. Authorize可以定義 order和actionKey, 實現重定向的檢測。
       如頁面功能:列表頁, 編輯頁, 保存, 刪除。  
          為刪除Action設定  一組order{ 保存, 編輯頁  } 。 由於首先總是檢測當前action, 所以等同於 order={ 刪除, 保存, 編輯頁  }
      1. 檢測權限  “刪除” , 若已ContainsKey, 直接返回 授權值。   若未定義, 繼續向下執行;
      2. 檢測權限 “保存” , 若已ContainsKey,  直接返回 授權值。   若未定義, 繼續向下執行;
      3. 檢測權限 “編輯頁” , 若已ContainsKey,  直接返回 授權值。   若未定義, 繼續向下執行;
      4. 認定無需校驗, 返回 (已授權)
  5. 若要禁用當前Action的權限檢測
    1. 在action上設置 order=-1 且action=""
  6. 最后, 為啟用以上功能, 在jfinal 啟動時配置:

    public void configInterceptor(Interceptors me) {
              me.addGlobalActionInterceptor(new AuthorityValidateInterceptor());//進行所有Action與權限配置表的匹配檢測
              me.addGlobalActionInterceptor(new ControllerInViewInterceptor());//允許FreeMaker訪問到session的值
    }

注意: 權限項設置(菜單定義)時, 不得將 /portal/user/index 簡寫為 /portal/user/ 否則導致權限判斷為“無權限”。導致排查困難。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM