Files
schoolNews/schoolNewsServ/.bin/mysql/sql/createTablePermissionControl.sql
2025-11-04 18:49:37 +08:00

71 lines
3.4 KiB
SQL
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

use school_news;
-- 统一资源权限控制表
DROP TABLE IF EXISTS `tb_resource_permission`;
CREATE TABLE `tb_resource_permission` (
`id` VARCHAR(50) NOT NULL COMMENT '权限ID',
`resource_type` INT(4) NOT NULL COMMENT '资源类型1新闻 2课程 3学习任务 4部门 5角色 6成就 7定时任务 8轮播图 9标签 10AI知识库',
`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='统一资源权限控制表';
-- 说明:
-- 1. resource_type 资源类型说明对应ResourceType枚举
-- 1 - NEWS (新闻/资源)
-- 2 - COURSE (课程)
-- 3 - TASK (学习任务)
-- 4 - DEPT (部门)
-- 5 - ROLE (角色)
-- 6 - ACHIEVEMENT (成就)
-- 7 - CRONTAB_TASK (定时任务)
-- 8 - BANNER (轮播图)
-- 9 - TAG (标签)
-- 10 - AI_KNOWLEDGE (AI知识库)
-- 注意:这些值必须与 common-core/enums/ResourceType.java 中的枚举定义完全一致
--
-- 2. dept_id 和 role_id 组合使用:
-- - 都为NULL超级管理员权限所有人可访问
-- - dept_id有值role_id为NULL该部门所有人可访问
-- - dept_id为NULLrole_id有值该角色所有人可访问跨部门
-- - 都有值:该部门的该角色可访问(精确控制)
--
-- 3. 权限说明:
-- - can_read查看权限浏览、阅读、查询
-- - can_write编辑权限修改、删除
-- - can_execute执行权限发布、审核、执行等高级操作
--
-- 4. 权限创建逻辑:
-- - root_department的superadmin创建资源时为所有部门和角色创建权限
-- - 普通用户创建资源时:为父部门管理员+子部门所有角色创建权限
-- - 始终为root_department的superadmin创建全权限记录
--
-- 5. 查询示例:
-- 查询用户对某资源的权限:
-- SELECT * FROM tb_resource_permission
-- WHERE resource_type = 1
-- AND resource_id = 'xxx'
-- 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
-- AND deleted = 0;