3.9 KiB
3.9 KiB
部门权限配置功能 - 部署说明
📋 部署步骤
1. 应用数据库迁移
执行以下命令将新的数据库表结构应用到数据库:
npx prisma migrate deploy
或者如果是在开发环境:
npx prisma migrate dev
这会创建 department_material_permissions 表。
2. 为现有部门创建默认权限配置
运行数据迁移脚本,为所有已存在的部门创建默认权限配置:
npx tsx scripts/migrate-department-permissions.ts
说明:
- 脚本会扫描所有部门
- 为每个部门的所有素材类型创建默认权限配置
- 默认权限:查看/下载 = 不允许,分享 = 允许
- 如果部门已有权限配置,会跳过已存在的类型
3. 重启应用
重启 Next.js 应用以使新功能生效:
npm run dev
# 或生产环境
npm run build
npm start
✅ 功能验证
1. 检查权限配置界面
- 以超级管理员身份登录
- 进入"系统管理"页面
- 点击"部门权限配置"Tab
- 应该能看到所有部门的折叠列表
- 点击部门可以展开查看权限配置
2. 测试权限功能
- 创建一个测试部门(如果没有)
- 为该部门配置某些素材类型的权限
- 使用该部门的用户登录
- 验证只能看到有查看权限的素材类型
- 验证只能下载有下载权限的素材
3. 测试分享链接
- 通过分享链接访问素材
- 验证分享链接不受权限限制(所有人都可以访问)
🔧 功能说明
权限配置
- 可见权限:控制部门是否可以在素材列表中看到该类型的素材
- 下载权限:控制部门是否可以下载该类型的素材
- 分享权限:控制部门是否可以分享该类型的素材(默认允许)
默认权限
新建部门时的默认权限:
- 查看权限:不允许(需要管理员手动开启)
- 下载权限:不允许(需要管理员手动开启)
- 分享权限:允许(可以手动关闭)
权限继承
- 超级管理员(ADMIN且无managedDepartment):不受任何权限限制
- 部门管理员(有managedDepartment):按照管理部门的权限配置执行
- 普通用户:按照自己部门的权限配置执行
关联权限
- 部门可以关联到其他部门的权限配置
- 关联后,权限会实时跟随源部门的变化
- 关联状态下,权限开关显示为灰色,不可编辑
复制权限
- 可以将一个部门的权限配置复制到其他部门
- 复制后,目标部门可以独立编辑(不会自动关联)
📝 注意事项
- 素材类型自动识别:系统会自动从数据库中获取所有素材类型,新增素材类型无需修改代码
- 历史数据:已存在的部门需要运行迁移脚本创建默认权限配置
- 分享链接:分享链接访问不受权限限制,所有人都可以访问
- 权限检查:素材列表、详情、下载接口都已增加权限检查(分享链接除外)
🐛 故障排查
TypeScript 类型错误
如果IDE显示 departmentMaterialPermission 不存在的错误:
- 重启 TypeScript 服务器(VS Code: Ctrl+Shift+P -> "TypeScript: Restart TS Server")
- 或者重启 IDE
权限不生效
- 检查用户是否有部门信息(
department字段) - 检查权限配置是否正确保存
- 检查是否是分享链接访问(分享链接不受限制)
- 检查用户角色(超级管理员不受限制)
素材类型不显示
- 检查数据库中是否有该类型的素材
- 系统会自动从数据库获取所有素材类型
- 如果没有素材,会使用默认类型列表
📚 相关文件
- 数据库模型:
prisma/schema.prisma - 权限工具函数:
lib/department-permission.ts - 权限配置API:
app/api/admin/department-permissions/ - 权限配置界面:
components/DepartmentPermissionsTab.tsx - 数据迁移脚本:
scripts/migrate-department-permissions.ts