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

  • 相关阅读:
    Lambda表达式介绍 dodo
    VS2010引用App_Code下的类文件问题解决方法(转) dodo
    读取EXCEL文件数字类型字段为空的问题 dodo
    sql server 2000:不能打开到主机的连接,在端口1433:连接失败 dodo
    sql2008附加数据库只读解决办法 dodo
    js倒计时跳转页面 dodo
    orchard上传文件提示System.Web.HttpException: 超过了最大请求长度 dodo
    SQLServer2008设置 开启INTERNET远程连接(转) dodo
    SQLSERVER2008端口改变后的远程连接和数据库连接 dodo
    无法生成临时类(result=1) dodo
  • 原文地址:https://www.cnblogs.com/crabo/p/6386136.html
Copyright © 2011-2022 走看看