为操作日志模块增加完整的权限控制配置,包括API权限配置和数据库权限初始化。
src/server/api/operation-logs/index.ts需要在 createCrudRoutes 中添加 permissions 参数:
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'] // 删除操作日志
}
});
需要在 docs/crm-permission-init.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);
-- 超级管理员拥有所有操作日志权限
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:%';
-- 系统管理员拥有操作日志管理权限
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:%';
-- 部门经理查看部门及下级操作日志
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');
-- 销售经理查看部门操作日志
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');
-- 销售人员只查看个人操作日志
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');
-- 访客只查看个人操作日志
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');
system:log:create, system:log:update, system:log:deletesystem:log:view:own, system:log:view:department, system:log:view:sub_department, system:log:view:all前端页面需要根据权限标识控制按钮显示:
const { hasPermission } = usePermission();
// 检查是否有查看操作日志权限
const canViewLogs = hasPermission(['system:log:view:all', 'system:log:view:department', 'system:log:view:own']);
// 检查是否有删除操作日志权限
const canDeleteLogs = hasPermission(['system:log:delete']);
在 src/client/admin/menu.tsx 中添加权限检查:
{
key: '/admin/logs',
icon: <FileTextOutlined />,
label: '操作日志',
permissions: ['system:log:view:all', 'system:log:view:department', 'system:log:view:own']
}
WHERE user_id = 当前用户IDWHERE user_id IN (当前部门所有用户)WHERE user_id IN (当前部门及子部门所有用户)通过通用CRUD模块的权限系统自动处理数据权限过滤。
src/server/api/operation-logs/index.tsdocs/crm-permission-init.sql 末尾添加操作日志权限```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;