用户权限设计,数据权限设计
做着b端的系统权限设计开发,数据权限的需求是必不可少的。 它主要通过数据权限控制原始数据,使每个人都有不同的显示数据。 例如,运营普通人只看自己的数据,运营经理可以看到所有下级的数据; 营销人员只想看某个城市的数据。 在设计上,可以为查询字段设置适当的规则。
规则说明条件规则:大于或等于/大于或等于/小于或等于/包含/模糊/不等于规则值:指定值(固定值/系统上下文变量) )日期默认格式: 2023-2023 {sys_user_code}配置为:编码
描述
sys_user_code
当前登录用户的登录帐户
sys_user_name
当前登录用户的真实姓名
sys_date
当前系统日期
sys_time
当前系统时间
sys_org_code
当前登录的用户部门号
sys_multi_org_code
当前登录用户拥有的所有组织代码。 用逗号隔开
tenant_id
当前登录的用户的租户ID
建表规范需要通过现注册人、注册部门进行数据权限控制时,业务表中需要以下系统标准字段: 添加和编辑数据通过mybatis-plus拦截器自动注入操作人员信息。 例如,作者、创建时间、作者所属的部门,如果有这些标准字段,就可以与当前注册者进行数据隔离控制
字段英文名
字段中文名
create_by
创建者帐户
create_time
创建时间
sys_org_code
作者登录部门
tenant_id
租户ID
具体实现表设计,在部门职称表和部门权限表中配置规则
//规则表
创建表` sys _ permission _ data _ rule ` (
` id`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cinotnullcomment & amp; #039; id )、
` permission_ID`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 菜单id&; #039;
` rule_name`varchar(50 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 规则名称&; #039;
` rule_column`varchar(50 ) characters et utf8 MB3collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 字段),
` rule_conditions`varchar(50 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 条件&; #039;
` rule_value`varchar(300 ) characters et utf8 MB3collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 规则值&; #039;
` status`varchar(3) characters et utf8 MB3collate utf8 mb3 _ general _ cidefaultnullcomment )权限有效状态1是否为0,
` create _ time ` datetimedefaultnullcomment & amp; #039; 创建时间&; #039;
` create_by`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnull,
` update _ time ` datetimedefaultnullcomment & amp; #039; 修改时间&; #039;
` update_by`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 修改者&; #039;
主密钥(` id ` )使用树,
ky ` idx _ spdr _ permission _ id ` (` permission _ id ` ) USING BTREE
) engine=innodbdefaultcharset=utf8mb3row _ format=dynamic;
//部门角色权限表
创建表` sys _ depart _ role _ permission ` (
` id`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ ci not null,
` depart_id`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 部门id&; #039;
` role_id`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 角色id ),
` permission_id`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 权限id&; #039;
` data_rule_ids`varchar(1000 ) characters et utf8 MB3collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 数据权限ids&; #039;
` operate _ date ` datetimedefaultnullcomment & amp; #039; 操作时间&; #039;
` operate_ip`varchar(20 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 操作IP&; #039;
主密钥(` id ` )使用树,
ky ` idx _ sdrp _ role _ per _ id ` (` role _ id `,` permission_id ` ) USING BTREE,
ky`idx_sdrp_role_id`(role_id ` ) USING BTREE,
key ` idx _ sdrp _ per _ id ` (` permission _ id ` ) USING BTREE
) engine=innodbdefaultcharset=utf8 mb3 row _ format=compact comment=& amp; #039; 部门角色权限表&; #039;
//部门权限表
创建表` sys _ depart _ permission ` (
` id`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ ci not null,
` depart_id`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 部门id&; #039;
` permission_id`varchar(32 ) characters et utf8 mb3 collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 权限id&; #039;
` data_rule_ids`varchar(1000 ) characters et utf8 MB3collate utf8 mb3 _ general _ cidefaultnullcomment & amp; #039; 数据规则id&; #039;
主密钥(` id ` )使用树
) engine=innodbdefaultcharset=utf8 mb3 row _ format=dynamic comment=& amp; #039; 部门权限表&; #039;
自定义注释处理
@permissiondata(code=&; #039; user/list&; #039; ) ) ) ) ) ) ) )。
获取当前用户分析注释,获取code值,获取菜单列表,通过菜单权限和当前用户,获取当前用户的权限规则列表,保存到request类的attribute中,使用mybatisplus在外部自己querister
publicstaticvoidinstallauthmplus (query wrapper? queryWrapper,Class? clazz ) {
//权限查询
MapString,syspermissiondatarulemodelrulemap=getrulemap (;
属性描述符[ ] orig descriptors=property utils.getproperty descriptors (clazz;
字符串:规则映射.密钥集(for ) () ) ) ) ) )。
oconvertutils.is not empty (c ) c.startswith(SQL_rules_column ) ) }
query wrapper.and (I-I.apply (getsqlrulevalue (rule map.get (c ).getRuleValue ) ) )
}
}
String name,column;
for (inti=iorigdescriptors.length; I ) {
name=orig descriptors [ I ].getname (;
judgedisuselessfield (name ) )
连续;
}
column=gettablefieldname(clazz,name );
if (column==空值) {
连续;
}
rule map.contains key (name ) }
addruletoquerywrapper (rule map.get (name ),column,orig descriptors [ I ].getproperty type ),querywrapper );
}
}
}入口使用控制器
@getmapping(value=&; #039; user/list&; #039; ) ) )。
@permissiondata(code=&; #039; user/list&; #039; ) ) ) ) ) ) ) )。
publicresultipagedemoloadmppermissonlist (
@requestparam(name=&; #039; pageno&; #039;defaultValue=&; #039; 1&; #039; )输入页面,
@requestparam(name=&; #039; pagesize (,defaultValue=&; #039; 10 ) ) Integer pageSize,
HttpServletRequest req ) {
resultipagedemoresult=newresultipagedemo (;
querywrapperdemoquerywrapper=newquerywrapperdemo (;
query generator.installauthmplus (query wrapper,Demo.class );
pagedemopage=new page demo (pageno,pageSize );
ipagedemopagelist=demo service.page (page,queryWrapper;
result.setsuccess(true;
result.setresult(pagelist;
返回结果;
}