docs: 添加租户权限管理数据库补丁SQL
## 新增功能 ### 🔧 数据库补丁SQL - 创建 `patch_tenant_permissions.sql` 快速修复补丁 - 添加用户角色类型字典:admin、租户管理员、部门管理员、普通用户 - 添加组织类型字典:租户、部门、子部门分类 - 添加权限等级字典:系统级、租户级、部门级、个人级 - 添加操作类型字典:创建租户、创建部门、管理用户、查看数据 ### 📋 数据字典完善 - 支持多租户权限分级控制的字典数据 - 包含中英文双语支持 - 提供前端渲染类型配置 - 支持权限可视化展示 ### 🎯 解决问题 - 补充admin新增租户权限控制缺失的数据字典支持 - 为前端权限按钮显示提供字典数据基础 - 完善多租户架构的数据基础设施 - 支持权限等级和操作类型的标准化管理 ### 📖 使用说明 - 执行补丁SQL前请备份数据库 - 根据实际ID生成策略调整字典ID值 - 执行后重启应用刷新字典缓存 - 支持扩展更多权限相关字典配置 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,37 @@
|
||||
|
||||
### 🚀 最新更新
|
||||
|
||||
#### v1.0.7 - 租户/部门权限管理优化 (2025-01-16)
|
||||
|
||||
**重要改进:**
|
||||
- **权限分级控制**: 实现租户和部门的分级权限管理
|
||||
- **admin用户**:可以创建租户(顶级组织)+ 创建部门
|
||||
- **普通用户**:只能在自己租户下创建部门,无法创建租户
|
||||
|
||||
- **前端权限控制**: 动态按钮显示
|
||||
- 只有admin角色才能看到"新增租户"按钮
|
||||
- 普通用户只显示"新增部门"按钮
|
||||
|
||||
- **后端API安全**: 严格的权限验证
|
||||
- 创建顶级组织时检查管理员权限
|
||||
- 非admin用户尝试创建租户时返回权限错误
|
||||
|
||||
- **文案优化**: 更准确的业务概念
|
||||
- "组织" → "租户":明确多租户架构
|
||||
- "新增子组织" → "新增部门":符合组织层级关系
|
||||
|
||||
**权限逻辑:**
|
||||
```
|
||||
├── admin用户
|
||||
│ ├── ✅ 创建租户(顶级组织)
|
||||
│ └── ✅ 创建部门(子组织)
|
||||
└── 普通用户
|
||||
├── ❌ 不能创建租户
|
||||
└── ✅ 只能在自己租户下创建部门
|
||||
```
|
||||
|
||||
**🔧 数据库补丁**:执行 [`patch_tenant_permissions.sql`](./patch_tenant_permissions.sql) 添加权限相关字典数据
|
||||
|
||||
#### v1.0.6 - 健康数据查询优化 (2025-01-16)
|
||||
|
||||
**重要改进:**
|
||||
@@ -45,6 +76,7 @@ GET /t_user_health_data/page?userId=12345&departmentInfo=1940374227169349634&sta
|
||||
**影响模块:**
|
||||
- `TUserHealthDataServiceImpl.java` - 核心查询逻辑优化
|
||||
- `DeviceUserMappingServiceImpl.java` - 设备用户映射服务
|
||||
- `SysOrgUnitsController.java` - 租户/部门权限控制
|
||||
|
||||
### 技术选型
|
||||
|
||||
@@ -96,6 +128,86 @@ git clone https://github.com/brunoGao/ljwx-boot-starter
|
||||
4. 启动`LjwxBootApplication`类
|
||||
5. 看到`---[LjwxBoot]-[ljwx-boot-admin]-启动完成,当前使用的端口:[9999],环境变量:[mybatis,dev]---`即代表启动成功
|
||||
|
||||
### 📊 数据字典SQL
|
||||
|
||||
系统使用数据字典来管理下拉选项、状态值等基础数据。以下是核心数据字典表的建表SQL:
|
||||
|
||||
#### 字典主表 (sys_dict)
|
||||
```sql
|
||||
CREATE TABLE `sys_dict` (
|
||||
`id` bigint NOT NULL COMMENT 'ID',
|
||||
`name` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '字典名称',
|
||||
`code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '字典编码',
|
||||
`type` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '字典类型(1:系统字典,2:业务字典)',
|
||||
`sort` int DEFAULT NULL COMMENT '排序值',
|
||||
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '字典描述',
|
||||
`status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '1' COMMENT '是否启用(0:禁用,1:启用)',
|
||||
`create_user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建用户名称',
|
||||
`create_user_id` bigint DEFAULT NULL COMMENT '创建用户ID',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新用户名称',
|
||||
`update_user_id` bigint DEFAULT NULL COMMENT '更新用户ID',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`is_deleted` tinyint DEFAULT '0' COMMENT '是否删除(0:否,1:是)',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `uk_code` (`code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='数据字典主表';
|
||||
```
|
||||
|
||||
#### 字典子项表 (sys_dict_item)
|
||||
```sql
|
||||
CREATE TABLE `sys_dict_item` (
|
||||
`id` bigint NOT NULL COMMENT 'ID',
|
||||
`dict_id` bigint DEFAULT NULL COMMENT '父字典ID',
|
||||
`dict_code` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '父字典编码',
|
||||
`value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '数据值',
|
||||
`zh_cn` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '中文名称',
|
||||
`en_us` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '英文名称',
|
||||
`type` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '类型(前端渲染类型)',
|
||||
`sort` int DEFAULT NULL COMMENT '排序值',
|
||||
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '字典描述',
|
||||
`status` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT '1' COMMENT '是否启用(0:禁用,1:启用)',
|
||||
`create_user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '创建用户名称',
|
||||
`create_user_id` bigint DEFAULT NULL COMMENT '创建用户ID',
|
||||
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
|
||||
`update_user` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci DEFAULT NULL COMMENT '更新用户名称',
|
||||
`update_user_id` bigint DEFAULT NULL COMMENT '更新用户ID',
|
||||
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
|
||||
`is_deleted` tinyint DEFAULT '0' COMMENT '是否删除(0:否,1:是)',
|
||||
PRIMARY KEY (`id`),
|
||||
KEY `idx_dict_code` (`dict_code`),
|
||||
KEY `idx_dict_id` (`dict_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='数据字典子项表';
|
||||
```
|
||||
|
||||
#### 基础字典数据
|
||||
```sql
|
||||
-- 状态字典
|
||||
INSERT INTO `sys_dict` (`id`, `name`, `code`, `type`, `sort`, `description`, `status`) VALUES
|
||||
(1, '状态', 'status', '1', 1, '通用状态字典', '1');
|
||||
|
||||
INSERT INTO `sys_dict_item` (`id`, `dict_id`, `dict_code`, `value`, `zh_cn`, `en_us`, `type`, `sort`, `description`, `status`) VALUES
|
||||
(1, 1, 'status', '0', '禁用', 'Disabled', 'error', 1, '禁用状态', '1'),
|
||||
(2, 1, 'status', '1', '启用', 'Enabled', 'success', 2, '启用状态', '1');
|
||||
|
||||
-- 用户状态字典
|
||||
INSERT INTO `sys_dict` (`id`, `name`, `code`, `type`, `sort`, `description`, `status`) VALUES
|
||||
(2, '用户状态', 'user_status', '1', 2, '用户状态字典', '1');
|
||||
|
||||
INSERT INTO `sys_dict_item` (`id`, `dict_id`, `dict_code`, `value`, `zh_cn`, `en_us`, `type`, `sort`, `description`, `status`) VALUES
|
||||
(3, 2, 'user_status', '0', '禁用', 'Disabled', 'error', 1, '用户禁用', '1'),
|
||||
(4, 2, 'user_status', '1', '正常', 'Normal', 'success', 2, '用户正常', '1'),
|
||||
(5, 2, 'user_status', '2', '锁定', 'Locked', 'warning', 3, '用户锁定', '1');
|
||||
|
||||
-- 字典类型字典
|
||||
INSERT INTO `sys_dict` (`id`, `name`, `code`, `type`, `sort`, `description`, `status`) VALUES
|
||||
(3, '字典类型', 'dict_type', '1', 3, '字典类型分类', '1');
|
||||
|
||||
INSERT INTO `sys_dict_item` (`id`, `dict_id`, `dict_code`, `value`, `zh_cn`, `en_us`, `type`, `sort`, `description`, `status`) VALUES
|
||||
(6, 3, 'dict_type', '1', '系统字典', 'System Dict', 'primary', 1, '系统内置字典', '1'),
|
||||
(7, 3, 'dict_type', '2', '业务字典', 'Business Dict', 'info', 2, '业务定制字典', '1');
|
||||
```
|
||||
|
||||
### 项目结构
|
||||
|
||||
```
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
-- ===============================================
|
||||
-- 租户/部门权限管理补丁SQL
|
||||
-- 功能: 为admin新增租户权限控制添加数据字典支持
|
||||
-- 版本: v1.0.7
|
||||
-- 日期: 2025-01-16
|
||||
-- ===============================================
|
||||
|
||||
-- 1. 添加用户角色类型字典
|
||||
INSERT INTO `sys_dict` (`id`, `name`, `code`, `type`, `sort`, `description`, `status`, `create_time`) VALUES
|
||||
(1001, '用户角色类型', 'user_role_type', '1', 10, '用户角色分类字典', '1', NOW());
|
||||
|
||||
INSERT INTO `sys_dict_item` (`id`, `dict_id`, `dict_code`, `value`, `zh_cn`, `en_us`, `type`, `sort`, `description`, `status`, `create_time`) VALUES
|
||||
(10001, 1001, 'user_role_type', 'admin', '系统管理员', 'Administrator', 'error', 1, '系统最高权限管理员,可创建租户', '1', NOW()),
|
||||
(10002, 1001, 'user_role_type', 'tenant_admin', '租户管理员', 'Tenant Admin', 'warning', 2, '租户管理员,可管理租户下所有资源', '1', NOW()),
|
||||
(10003, 1001, 'user_role_type', 'dept_admin', '部门管理员', 'Department Admin', 'info', 3, '部门管理员,可管理部门下的用户和资源', '1', NOW()),
|
||||
(10004, 1001, 'user_role_type', 'user', '普通用户', 'Normal User', 'success', 4, '普通用户,只能查看和使用基本功能', '1', NOW());
|
||||
|
||||
-- 2. 添加组织类型字典
|
||||
INSERT INTO `sys_dict` (`id`, `name`, `code`, `type`, `sort`, `description`, `status`, `create_time`) VALUES
|
||||
(1002, '组织类型', 'org_type', '1', 11, '组织架构类型字典', '1', NOW());
|
||||
|
||||
INSERT INTO `sys_dict_item` (`id`, `dict_id`, `dict_code`, `value`, `zh_cn`, `en_us`, `type`, `sort`, `description`, `status`, `create_time`) VALUES
|
||||
(10005, 1002, 'org_type', '1', '租户', 'Tenant', 'primary', 1, '顶级组织,多租户架构的租户', '1', NOW()),
|
||||
(10006, 1002, 'org_type', '2', '部门', 'Department', 'info', 2, '租户下的部门组织', '1', NOW()),
|
||||
(10007, 1002, 'org_type', '3', '子部门', 'Sub Department', 'default', 3, '部门下的子部门', '1', NOW());
|
||||
|
||||
-- 3. 添加权限等级字典
|
||||
INSERT INTO `sys_dict` (`id`, `name`, `code`, `type`, `sort`, `description`, `status`, `create_time`) VALUES
|
||||
(1003, '权限等级', 'permission_level', '1', 12, '系统权限等级分类', '1', NOW());
|
||||
|
||||
INSERT INTO `sys_dict_item` (`id`, `dict_id`, `dict_code`, `value`, `zh_cn`, `en_us`, `type`, `sort`, `description`, `status`, `create_time`) VALUES
|
||||
(10008, 1003, 'permission_level', '1', '系统级', 'System Level', 'error', 1, '系统级权限,可操作所有资源', '1', NOW()),
|
||||
(10009, 1003, 'permission_level', '2', '租户级', 'Tenant Level', 'warning', 2, '租户级权限,可操作租户内资源', '1', NOW()),
|
||||
(10010, 1003, 'permission_level', '3', '部门级', 'Department Level', 'info', 3, '部门级权限,可操作部门内资源', '1', NOW()),
|
||||
(10011, 1003, 'permission_level', '4', '个人级', 'Personal Level', 'success', 4, '个人级权限,只能操作个人资源', '1', NOW());
|
||||
|
||||
-- 4. 添加操作类型字典
|
||||
INSERT INTO `sys_dict` (`id`, `name`, `code`, `type`, `sort`, `description`, `status`, `create_time`) VALUES
|
||||
(1004, '操作类型', 'operation_type', '1', 13, '系统操作类型字典', '1', NOW());
|
||||
|
||||
INSERT INTO `sys_dict_item` (`id`, `dict_id`, `dict_code`, `value`, `zh_cn`, `en_us`, `type`, `sort`, `description`, `status`, `create_time`) VALUES
|
||||
(10012, 1004, 'operation_type', 'create_tenant', '创建租户', 'Create Tenant', 'error', 1, '创建新租户,仅admin可操作', '1', NOW()),
|
||||
(10013, 1004, 'operation_type', 'create_dept', '创建部门', 'Create Department', 'warning', 2, '在租户下创建部门', '1', NOW()),
|
||||
(10014, 1004, 'operation_type', 'manage_user', '管理用户', 'Manage User', 'info', 3, '管理用户账号和权限', '1', NOW()),
|
||||
(10015, 1004, 'operation_type', 'view_data', '查看数据', 'View Data', 'success', 4, '查看业务数据', '1', NOW());
|
||||
|
||||
-- 5. 更新现有组织表,增加组织类型字段(如果不存在)
|
||||
-- 注意:这个操作需要根据实际表结构调整
|
||||
-- ALTER TABLE `sys_org_units` ADD COLUMN `org_type` varchar(10) DEFAULT '2' COMMENT '组织类型(1:租户,2:部门,3:子部门)' AFTER `level`;
|
||||
|
||||
-- 6. 为现有组织数据设置类型(根据level判断)
|
||||
-- UPDATE `sys_org_units` SET `org_type` = '1' WHERE `level` = 1 AND `parent_id` = 0;
|
||||
-- UPDATE `sys_org_units` SET `org_type` = '2' WHERE `level` = 2;
|
||||
-- UPDATE `sys_org_units` SET `org_type` = '3' WHERE `level` >= 3;
|
||||
|
||||
-- ===============================================
|
||||
-- 执行说明:
|
||||
-- 1. 在应用此补丁前,请备份现有数据库
|
||||
-- 2. 根据实际sys_dict表的id生成策略调整id值
|
||||
-- 3. 如需要修改组织表结构,请取消注释相关ALTER和UPDATE语句
|
||||
-- 4. 执行后重启应用以刷新字典缓存
|
||||
-- ===============================================
|
||||
Reference in New Issue
Block a user