jeecg权限设计的介绍之数据权限
来源:互联网 发布:星光大道网络报名 编辑:程序博客网 时间:2024/05/29 09:39
1、 基本概念
上次我们说个一个用户从部门,角色,菜单资源,按钮权限的设计,那么出现这样一个场景。
A和B同时属于,某个部分销售经理,A负责北京的销售,B负责上海的销售。那么当A打开西系统的时候看到的就应该是北京的销售数据,B看到是上海的销售数据。
这样的业务情景。在同样的情景下,jeecg也能用规则区分出来,那就是数据权限。
2、数据权限的实现
2.1 jeecg 的页面实现
新建一个用户
这个用户是角色是普通职员,下面新建一个菜单资源,
并且赋值上数据权限
给这个角色配置资源菜单和数据权限
那么用你就会发现 ,刚刚我们配置的菜单资源上的规则。不用的部门的资料真的看不见了
那么下面就说说jeecg 数据权限是怎么实现的
2.1 jeecg 代码实现
jeecg 其实就只应用一张表
create table jeecg.t_s_data_rule( id national varchar(96), rule_name national varchar(96), rule_column national varchar(300), rule_conditions national varchar(300), rule_value national varchar(300), create_date datetime, create_by national varchar(96), create_name national varchar(96), update_date datetime, update_by national varchar(96), update_name national varchar(96), functionId national varchar(96));
大家都听说的sql 注入。这个数据规则的实现就是根据这个原理就是在数据查询的时候 拼接上自动的sql
where 所属机构=’xxxxxxx’
每当jeecg访问菜单的时候都会经过jeecg自定义的拦截器
/jeecgT/src/org/jeecgframework/core/interceptors/AuthInterceptor.java
Set<String> dataruleCodes = systemService.getOperationCodesByUserIdAndDataId(client.getUser().getId(), functionId); request.setAttribute("dataRulecodes", dataruleCodes); for (String dataRuleId : dataruleCodes) { TSDataRule dataRule = systemService.getEntity(TSDataRule.class, dataRuleId); MENU_DATA_AUTHOR_RULES.add(dataRule); MENU_DATA_AUTHOR_RULE_SQL += SysContextSqlConvert.setSqlModel(dataRule);}
但拦截器发现我们定义的菜单有 数据规则权限的时候,他就会根据 functionId 去寻找 数据权限这个表中的数据,然后把 这个表中定义的数据翻译成sql 语句 下面我是debug模式下的截图
那么他就会很明显的 格式化数据权限表的我们的定义的sql ,查询数据的结果就会过滤出来了。那么就试下不同部门看到了不同的数据。
那么很明显,需要规则的字段必须是 查询表中的有的 例如 JeecgDemo.depId 肯定是上下文中找到的部门id
jeecg 规则如下
参数说明:规则字段 查询模式采用 HIbernate方式,该字段为实体的字段,例如: createBy查询模式采用 Minidao方式,该字段为表的字段,例如: create_by条件控制 匹配方式进行选择规则值 固定值或者系统上下文变量系统上下文变量采用 #{?}格式系统标准上下文变量参考: sys_company_code 当前登录用户公司编号 sys_org_code 当前登录用户部门编号 sys_user_code 当前登录用户账号(对应系统用户账户例如: admin) sys_user_name 当前用户真实名称 sys_date 当前日期 sys_time 当前时间
3、总结
jeecg 在角色上做了权限的控制,现在又在 数据层上做了规则的设置,将来也有可能对权限继续细化,会在表的字段做 “字段权限 ”的设置。这是后话。现在大家都jeecg权限估计有了一个大致的了解了吧。以后会更细节讲解jeecg权限问题。
- jeecg权限设计的介绍之数据权限
- jeecg权限设计的介绍
- jeecg权限管理介绍表单级别数据权限
- jeecg权限管理介绍表单级别数据权限(2)
- jeecg权限管理介绍表单级别数据权限(3)
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- 通用权限管理设计 之 数据权限
- Jeecg权限控制
- JEECG - 基于代码生成器的J2EE智能开发框架 续五:权限设计
- 数据权限如何设计?
- 数据权限设计
- Web API 实战之 统一的请求验证
- HTML5 LocalStorage 本地存储
- Loadrunner 9.5/11 java vuser环境配置问题(已解决)
- ACdream 1056 Vitaly and Strings
- 分享一篇GDB调试方法
- jeecg权限设计的介绍之数据权限
- org.hibernate.console.HibernateConsoleRuntimeException: Received a NoClassDefFoundError
- 子网掩码和ip地址的关系
- javascript call和apply方法详解
- MQTT协议初接触
- 关于UIMenuController的使用 弹出菜单UIMenuItem
- Saruman's Army(贪心)
- google 趣事面试题
- Freertos 队列