zoukankan      html  css  js  c++  java
  • 注解式功能权限控制机制

    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/ 否则导致权限判断为“无权限”。导致排查困难。

  • 相关阅读:
    【纯水题】POJ 1852 Ants
    【树形DP】BZOJ 1131 Sta
    【不知道怎么分类】HDU
    【树形DP】CF 1293E Xenon's Attack on the Gangs
    【贪心算法】CF Emergency Evacuation
    【思维】UVA 11300 Spreading the Wealth
    【树形DP】NOI2003 逃学的小孩
    【树形DP】BZOJ 3829 Farmcraft
    【树形DP】JSOI BZOJ4472 salesman
    【迷宫问题】CodeForces 1292A A NEKO's Maze Game
  • 原文地址:https://www.cnblogs.com/crabo/p/6386136.html
Copyright © 2011-2022 走看看