用户权限设计,数据权限设计

做着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;

返回结果;

}

用户权限设计

推荐阅读