一、平台设置流程
可以参考官方视频的设置:
https://www.bilibili.com/video/BV1cE4HexEfZ
1、先进入 系统管理 - 系统菜单,选择应用后点击【菜单管理】:2、对应展示的每个菜单,选择【数据权限】:
3、业务数据权限配置
一、配置数据源连接,选择业务对应的数据源
二、配置字段条件,允许一个字段配置多种条件
三、切换到方案管理,每个方案可以把字段条件进行组合为一个方案
4、把数据权限分配到角色中
有两种分配方式
一、系统权限 - 角色管理 - 角色权限
二、系统权限 - 权限管理 - 批量设置
二、表结构和代码分析
数据权限涉及到了三张表:
对应上面的三个步骤,数据源 -> 字段管理 -> 数据权限
CREATE TABLE `base_moduledataauthorize` ( `F_Id` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '自然主键', `F_FullName` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '字段名称', `F_EnCode` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '字段编号', `F_Type` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '字段类型', `F_ConditionSymbol` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '条件符号', `F_ConditionSymbolJson` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '条件符号Json', `F_ConditionText` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '条件内容', `F_PropertyJson` longtext CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '扩展属性', `F_Description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '描述', `F_SortCode` bigint DEFAULT NULL COMMENT '排序', `F_EnabledMark` int DEFAULT NULL COMMENT '有效标志', `F_CreatorTime` datetime DEFAULT NULL COMMENT '创建时间', `F_CreatorUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建用户', `F_LastModifyTime` datetime DEFAULT NULL COMMENT '修改时间', `F_LastModifyUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '修改用户', `F_DeleteMark` int DEFAULT NULL COMMENT '删除标志', `F_DeleteTime` datetime DEFAULT NULL COMMENT '删除时间', `F_DeleteUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '删除用户', `F_ModuleId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '功能主键', `F_FieldRule` int DEFAULT NULL COMMENT '字段规则', `F_ChildTableKey` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '子表规则key', `F_BindTable` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '绑定表格Id', `F_TenantId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`F_Id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='数据权限配置'; CREATE TABLE `base_moduledataauthorizelink` ( `F_Id` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '自然主键', `F_LinkId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '数据源连接', `F_LinkTables` varchar(400) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '连接表名', `F_ModuleId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '菜单主键', `F_Type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '权限类型', `F_TenantId` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`F_Id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='数据权限连接管理'; CREATE TABLE `base_moduledataauthorizescheme` ( `F_Id` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci NOT NULL COMMENT '自然主键', `F_EnCode` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '方案编号', `F_FullName` varchar(100) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '方案名称', `F_ConditionJson` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '条件规则Json', `F_ConditionText` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '条件规则描述', `F_Description` text CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci COMMENT '描述', `F_SortCode` bigint DEFAULT NULL COMMENT '排序', `F_EnabledMark` int DEFAULT NULL COMMENT '有效标志', `F_CreatorTime` datetime DEFAULT NULL COMMENT '创建时间', `F_CreatorUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '创建用户', `F_LastModifyTime` datetime DEFAULT NULL COMMENT '修改时间', `F_LastModifyUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '修改用户', `F_DeleteMark` int DEFAULT NULL COMMENT '删除标志', `F_DeleteTime` datetime DEFAULT NULL COMMENT '删除时间', `F_DeleteUserId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '删除用户', `F_ModuleId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '功能主键', `F_AllData` int DEFAULT NULL COMMENT '全部数据标识', `F_TenantId` varchar(50) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT NULL COMMENT '租户id', PRIMARY KEY (`F_Id`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3 ROW_FORMAT=DYNAMIC COMMENT='数据权限方案';
然后就是怎么调用权限解析的,看源码找了半天,发现消息发送业务是有这么一个使用方法:
内部实现如下:
可以看到先是获取了QueryWrapper对象,调用了一个获取权限对象的方法
从权限对象获得ResourceList,这个ResourceList需要过滤出当前这个moduleId的才行
而下一步都是对Resource的信息的记录转换成SQL查询条件
关于ResourceList是通过这里查询的
到最后的SQL实现就是通过角色id查询的,而最后的
base_moduledataauthorizescheme表就是权限方案,可以看到是通过获取方案记录进行实现的
<select id="findResource" parameterType="String" resultMap="ResourceVO"> SELECT * FROM base_moduledataauthorizescheme WHERE F_Id IN (SELECT F_ItemId FROM base_authorize WHERE F_ObjectId IN (${objectId}) AND F_ItemType = 'resource') and F_EnabledMark = 1 Order by F_SortCode desc </select>
标签:utf8mb3,COMMENT,JNPF,DEFAULT,ci,关于,授权,NULL,COLLATE From: https://www.cnblogs.com/mindzone/p/18496321