zoukankan      html  css  js  c++  java
  • B/S页面 通用数据权限控制

        数据权限常见场景有:

      1. 数据仅部门级可见
      2. 数据仅本人可见
      3. 数据仅某角色可见
      4. 在可见的基础上,进行功能控制: 修改,删除
      5. 在树形结构里,在可见基础上进行 新增/修改/删除控制

    我的实现方式: 资源---所有者   (请思考哪些可以是资源, 哪些可以是所有者)。 例如:在一个OA应用中的拟办工作,它是所有单证流程的起始点。但不同的流程面,有效的发起人是必须限定的:请假单--全体人员; 收文发文--办公室人员;会议室申请单--项目经理;下面我将实现的是:所有的单证都从属于类别,所有属于“OA单证”,仅“办公室”人员可以拟定。

        1. 确定资源定义位置。  如用户,则用户维护页是该资源的位置,资源的Id就是UserId。 这里进入“表单类别设定页面”。

               

        001

      按住Alt+双击 页面空白处,弹出资源授权页,选择操作为“查看”。实际上,任何拥有“修改”的人,都拥有查看权限,同理: 查看<修改<创建<删除.

      002

           2. 为指定资源设置“所有者”。 所有者类型可以有: 部门/人员/工作组/角色组

      003

        3. 保存设置。 这样就配置了仅“办公室”“陈伟”能拟定“OA表单”了。

        4.现在进入“拟办工作页面”。 此时权限尚未启用。 (哪些点可以进行权限控制? Request—>Service—>Dao—>Db  已及反方向)

      004

      5. 在拟办工作页面, 生成树形节点, 查询节点中,加入c.Id 控制。  这就意味着, 输出列表时,会检验每一个“类别”,判断当前用户是否属于授权的“部门/用户/工作组”

      005

      6. 用财务部人员登录系统,类别“OA单证”已经消失了。

      006

      7.以上Magic仅仅是QueryInfo在提交NHibernate之前的一个小动作,调用AclHQLInjector而已。 目前的触发条件是AclProperty。 对于大量数据权限定义的情况, 完全可以将Inject条件在数据库中定义。 QueryInfo默认触发检验即可。

      8. 最后可见 数据权限设置表 的简单结构:

      007

    1. 相关阅读:
      Node 修改默认镜像源
      Mac下apache虚拟主机配置
      Grep命令出现 Binary file (standard input) matches
      idea取出方法参数提示
      Java8 Optional用法
      Codeforces Round #638 (Div. 2)
      Codeforces Round #637 (Div. 2)
      Codeforces Round #636 (Div. 3)
      Tree
      Educational Codeforces Round 85
    2. 原文地址:https://www.cnblogs.com/crabo/p/1823529.html
    Copyright © 2011-2022 走看看