137 lines
3.9 KiB
Markdown
137 lines
3.9 KiB
Markdown
# 部门权限配置功能 - 部署说明
|
||
|
||
## 📋 部署步骤
|
||
|
||
### 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`
|
||
|