gongxiangp2/docs/department-permissions-deployment.md

137 lines
3.9 KiB
Markdown
Raw 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.

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