소스 검색

📝 docs(operation-log): add operation log permission configuration plan

- document API permission configuration for operation logs
- detail database permission initialization SQL scripts
- define permission naming conventions and hierarchy
- outline frontend permission integration approach
- describe data permission implementation rules
- provide step-by-step implementation guide
- include test cases and verification methods
yourname 4 달 전
부모
커밋
11e6c3d121
1개의 변경된 파일196개의 추가작업 그리고 0개의 파일을 삭제
  1. 196 0
      docs/operation-log-permission-plan.md

+ 196 - 0
docs/operation-log-permission-plan.md

@@ -0,0 +1,196 @@
+# 操作日志权限配置方案
+
+## 概述
+为操作日志模块增加完整的权限控制配置,包括API权限配置和数据库权限初始化。
+
+## 1. 操作日志API权限配置
+
+### 1.1 当前状态分析
+- 位置:`src/server/api/operation-logs/index.ts`
+- 当前配置:仅使用基础CRUD路由,无权限控制
+- 需要增加:细粒度的权限控制配置
+
+### 1.2 权限配置更新
+需要在 `createCrudRoutes` 中添加 `permissions` 参数:
+
+```typescript
+const operationLogRoutes = createCrudRoutes({
+  entity: OperationLog,
+  createSchema: CreateOperationLogDto,
+  updateSchema: UpdateOperationLogDto,
+  getSchema: OperationLogSchema,
+  listSchema: OperationLogSchema,
+  searchFields: ['resourceType', 'action', 'endpoint', 'username', 'ipAddress'],
+  middleware: [authMiddleware, enhancedPermissionWithLog],
+  userTracking: {
+    createdByField: 'userId',
+    updatedByField: undefined
+  },
+  permissions: {
+    create: ['system:log:create'],      // 创建操作日志
+    read: ['system:log:view:all'],      // 查看所有操作日志
+    update: ['system:log:update'],      // 更新操作日志
+    delete: ['system:log:delete']       // 删除操作日志 
+  }
+});
+```
+
+## 2. 数据库权限配置
+
+### 2.1 新增操作日志权限
+需要在 `docs/crm-permission-init.sql` 中添加以下权限记录:
+
+```sql
+-- 操作日志管理权限
+INSERT INTO permission (code, name, type, module, action, description, sort_order, is_active, parent_id) VALUES
+('system:log:create', '创建操作日志', 'operation', 'system', 'log:create', '允许创建操作日志记录', 1010, 1, NULL),
+('system:log:update', '编辑操作日志', 'operation', 'system', 'log:update', '允许编辑操作日志信息', 1020, 1, NULL),
+('system:log:delete', '删除操作日志', 'operation', 'system', 'log:delete', '允许删除操作日志记录', 1030, 1, NULL),
+('system:log:view:own', '查看个人操作日志', 'data', 'system', 'log:view', '仅查看自己创建的操作日志', 1041, 1, NULL),
+('system:log:view:department', '查看部门操作日志', 'data', 'system', 'log:view', '查看所在部门操作日志', 1042, 1, NULL),
+('system:log:view:sub_department', '查看部门及下级操作日志', 'data', 'system', 'log:view', '查看所在部门及下级部门操作日志', 1043, 1, NULL),
+('system:log:view:all', '查看所有操作日志', 'data', 'system', 'log:view', '查看系统所有操作日志', 1044, 1, NULL);
+```
+
+### 2.2 为角色分配操作日志权限
+
+#### 超级管理员权限
+```sql
+-- 超级管理员拥有所有操作日志权限
+INSERT INTO role_permission (role_id, permission_id, data_scope_type, created_at)
+SELECT r.id, p.id, 'COMPANY', NOW()
+FROM role r, permission p
+WHERE r.name = '超级管理员' AND p.code LIKE 'system:log:%';
+```
+
+#### 系统管理员权限
+```sql
+-- 系统管理员拥有操作日志管理权限
+INSERT INTO role_permission (role_id, permission_id, data_scope_type, created_at)
+SELECT r.id, p.id, 'COMPANY', NOW()
+FROM role r, permission p
+WHERE r.name = '系统管理员' AND p.code LIKE 'system:log:%';
+```
+
+#### 部门经理权限
+```sql
+-- 部门经理查看部门及下级操作日志
+INSERT INTO role_permission (role_id, permission_id, data_scope_type, created_at)
+SELECT r.id, p.id, 'SUB_DEPARTMENT', NOW()
+FROM role r, permission p
+WHERE r.name = '部门经理' 
+  AND p.code IN ('system:log:view:sub_department', 'system:log:view:department', 'system:log:view:own');
+```
+
+#### 销售经理权限
+```sql
+-- 销售经理查看部门操作日志
+INSERT INTO role_permission (role_id, permission_id, data_scope_type, created_at)
+SELECT r.id, p.id, 'SUB_DEPARTMENT', NOW()
+FROM role r, permission p
+WHERE r.name = '销售经理' 
+  AND p.code IN ('system:log:view:sub_department', 'system:log:view:department', 'system:log:view:own');
+```
+
+#### 销售人员权限
+```sql
+-- 销售人员只查看个人操作日志
+INSERT INTO role_permission (role_id, permission_id, data_scope_type, created_at)
+SELECT r.id, p.id, 'PERSONAL', NOW()
+FROM role r, permission p
+WHERE r.name = '销售人员' 
+  AND p.code IN ('system:log:view:own');
+```
+
+#### 访客权限
+```sql
+-- 访客只查看个人操作日志
+INSERT INTO role_permission (role_id, permission_id, data_scope_type, created_at)
+SELECT r.id, p.id, 'PERSONAL', NOW()
+FROM role r, permission p
+WHERE r.name = '访客' 
+  AND p.code IN ('system:log:view:own');
+```
+
+## 3. 权限标识命名规范
+
+### 3.1 权限分类
+- **操作权限**:`system:log:create`, `system:log:update`, `system:log:delete`
+- **数据权限**:`system:log:view:own`, `system:log:view:department`, `system:log:view:sub_department`, `system:log:view:all`
+
+### 3.2 权限层级
+- **个人级**:仅查看自己创建的操作日志
+- **部门级**:查看所在部门创建的操作日志
+- **子部门级**:查看所在部门及下级部门创建的操作日志
+- **公司级**:查看所有操作日志
+
+## 4. 前端集成
+
+### 4.1 权限检查
+前端页面需要根据权限标识控制按钮显示:
+
+```typescript
+const { hasPermission } = usePermission();
+
+// 检查是否有查看操作日志权限
+const canViewLogs = hasPermission(['system:log:view:all', 'system:log:view:department', 'system:log:view:own']);
+
+// 检查是否有删除操作日志权限
+const canDeleteLogs = hasPermission(['system:log:delete']);
+```
+
+### 4.2 菜单权限
+在 `src/client/admin/menu.tsx` 中添加权限检查:
+
+```typescript
+{
+  key: '/admin/logs',
+  icon: <FileTextOutlined />,
+  label: '操作日志',
+  permissions: ['system:log:view:all', 'system:log:view:department', 'system:log:view:own']
+}
+```
+
+## 5. 数据权限实现
+
+### 5.1 数据权限规则
+- **个人级**:`WHERE user_id = 当前用户ID`
+- **部门级**:`WHERE user_id IN (当前部门所有用户)`
+- **子部门级**:`WHERE user_id IN (当前部门及子部门所有用户)`
+- **公司级**:无额外过滤条件
+
+### 5.2 实现方式
+通过通用CRUD模块的权限系统自动处理数据权限过滤。
+
+## 6. 实施步骤
+
+### 步骤1:更新API路由
+1. 修改 `src/server/api/operation-logs/index.ts`
+2. 添加权限配置和中间件
+
+### 步骤2:更新权限初始化脚本
+1. 在 `docs/crm-permission-init.sql` 末尾添加操作日志权限
+2. 执行SQL脚本初始化权限数据
+
+### 步骤3:验证权限配置
+1. 测试不同角色的权限访问
+2. 验证数据权限过滤效果
+3. 验证前端权限检查功能
+
+## 7. 注意事项
+
+1. **向后兼容**:添加权限配置不会影响现有功能
+2. **权限缓存**:权限变更后需要重新登录生效
+3. **性能优化**:为常用查询字段添加数据库索引
+4. **日志记录**:所有权限检查失败的操作都会被记录
+
+## 8. 测试用例
+
+```sql
+-- 测试权限查询
+SELECT r.name, p.code, rp.data_scope_type 
+FROM role r
+JOIN role_permission rp ON r.id = rp.role_id
+JOIN permission p ON p.id = rp.permission_id
+WHERE p.code LIKE 'system:log:%'
+ORDER BY r.name, p.code;