1、 基本概念 上次我们说个一个用户从部门,角色,菜单资源,按钮权限的设计,那么出现这样一个场景。A和B同时属于,某个部分销售经理,A负责北京的销售,B负责上海的销售。那么当A打开西系统的时候看到的就应该是北京的销售数据,B看到是上海的销售数据。 这样的业务情景。在同样的情景下,jeecg也能用规则区分出来,那就是数据权限。 2、数据权限的实现2.1 jeecg 的页面实现 新建一个用户
这个用户是角色是普通职员,下面新建一个菜单资源,
并且赋值上数据权限
给这个角色配置资源菜单和数据权限
那么用你就会发现 ,刚刚我们配置的菜单资源上的规则。不用的部门的资料真的看不见了
那么下面就说说jeecg 数据权限是怎么实现的 2.2 jeecg 代码实现 jeecg 其实就只应用一张表
大家都听说的sql 注入。这个数据规则的实现就是根据这个原理就是在数据查询的时候 拼接上自动的sql
每当jeecg访问菜单的时候都会经过jeecg自定义的拦截器
但拦截器发现我们定义的菜单有 数据规则权限的时候,他就会根据 functionId 去寻找 数据权限这个表中的数据,然后把 这个表中定义的数据翻译成sql 语句 下面我是debug模式下的截图
那么他就会很明显的 格式化数据权限表的我们的定义的sql ,查询数据的结果就会过滤出来了。那么就试下不同部门看到了不同的数据。 那么很明显,需要规则的字段必须是 查询表中的有的 例如 JeecgDemo.depId 肯定是上下文中找到的部门id
jeecg 规则如下
3、总结 jeecg 在角色上做了权限的控制,现在又在 数据层上做了规则的设置,将来也有可能对权限继续细化,会在表的字段做 “字段权限 ”的设置。这是后话。现在大家都jeecg权限估计有了一个大致的了解了吧。以后会更细节讲解jeecg权限问题。 |