Files
schoolNews/schoolNewsServ/.bin/mysql/sql/createTablePermissionControl.sql

71 lines
3.4 KiB
MySQL
Raw Permalink Normal View History

2025-10-15 10:39:51 +08:00
use school_news;
-- 统一资源权限控制表
DROP TABLE IF EXISTS `tb_resource_permission`;
CREATE TABLE `tb_resource_permission` (
`id` VARCHAR(50) NOT NULL COMMENT '权限ID',
2025-11-04 18:49:37 +08:00
`resource_type` INT(4) NOT NULL COMMENT '资源类型1新闻 2课程 3学习任务 4部门 5角色 6成就 7定时任务 8轮播图 9标签 10AI知识库',
2025-10-15 10:39:51 +08:00
`resource_id` VARCHAR(50) NOT NULL COMMENT '资源ID',
`dept_id` VARCHAR(50) DEFAULT NULL COMMENT '部门IDNULL表示不限制部门',
`role_id` VARCHAR(50) DEFAULT NULL COMMENT '角色IDNULL表示不限制角色',
`can_read` TINYINT(1) DEFAULT 1 COMMENT '读权限0否 1是',
`can_write` TINYINT(1) DEFAULT 0 COMMENT '写权限0否 1是',
`can_execute` TINYINT(1) DEFAULT 0 COMMENT '执行权限0否 1是',
`creator` VARCHAR(50) DEFAULT NULL COMMENT '创建者',
`updater` VARCHAR(50) DEFAULT NULL COMMENT '更新者',
`create_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
`delete_time` TIMESTAMP NULL DEFAULT NULL COMMENT '删除时间',
`deleted` TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否删除',
PRIMARY KEY (`id`),
UNIQUE KEY `uk_resource_dept_role` (`resource_type`, `resource_id`, `dept_id`, `role_id`, `deleted`),
KEY `idx_resource` (`resource_type`, `resource_id`),
KEY `idx_dept` (`dept_id`),
KEY `idx_role` (`role_id`),
KEY `idx_permissions` (`can_read`, `can_write`, `can_execute`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci COMMENT='统一资源权限控制表';
-- 说明:
2025-10-29 19:08:22 +08:00
-- 1. resource_type 资源类型说明对应ResourceType枚举
-- 1 - NEWS (新闻/资源)
-- 2 - COURSE (课程)
-- 3 - TASK (学习任务)
-- 4 - DEPT (部门)
-- 5 - ROLE (角色)
-- 6 - ACHIEVEMENT (成就)
-- 7 - CRONTAB_TASK (定时任务)
-- 8 - BANNER (轮播图)
-- 9 - TAG (标签)
2025-11-04 18:49:37 +08:00
-- 10 - AI_KNOWLEDGE (AI知识库)
2025-10-29 19:08:22 +08:00
-- 注意:这些值必须与 common-core/enums/ResourceType.java 中的枚举定义完全一致
2025-10-15 10:39:51 +08:00
--
-- 2. dept_id 和 role_id 组合使用:
2025-10-29 19:08:22 +08:00
-- - 都为NULL超级管理员权限所有人可访问
2025-10-15 10:39:51 +08:00
-- - dept_id有值role_id为NULL该部门所有人可访问
2025-10-29 19:08:22 +08:00
-- - dept_id为NULLrole_id有值该角色所有人可访问跨部门
-- - 都有值:该部门的该角色可访问(精确控制)
2025-10-15 10:39:51 +08:00
--
-- 3. 权限说明:
2025-10-29 19:08:22 +08:00
-- - can_read查看权限浏览、阅读、查询
2025-10-15 10:39:51 +08:00
-- - can_write编辑权限修改、删除
2025-10-29 19:08:22 +08:00
-- - can_execute执行权限发布、审核、执行等高级操作
2025-10-15 10:39:51 +08:00
--
2025-10-29 19:08:22 +08:00
-- 4. 权限创建逻辑:
-- - root_department的superadmin创建资源时为所有部门和角色创建权限
-- - 普通用户创建资源时:为父部门管理员+子部门所有角色创建权限
-- - 始终为root_department的superadmin创建全权限记录
--
-- 5. 查询示例:
2025-10-15 10:39:51 +08:00
-- 查询用户对某资源的权限:
-- SELECT * FROM tb_resource_permission
-- WHERE resource_type = 1
-- AND resource_id = 'xxx'
2025-10-29 19:08:22 +08:00
-- AND (
-- (dept_id IS NULL AND role_id IS NULL) -- 超级权限
-- OR (dept_id = '用户部门' AND role_id IS NULL) -- 部门权限
-- OR (role_id = '用户角色' AND dept_id IS NULL) -- 角色权限
-- OR (dept_id = '用户部门' AND role_id = '用户角色') -- 精确权限
-- )
-- AND can_read = 1
2025-10-15 10:39:51 +08:00
-- AND deleted = 0;