feat(权限): 安装和配置 Spatie Permission 包

- 安装 spatie/laravel-permission 包(v6.24.1)
- 发布配置文件和迁移文件
- 运行迁移创建权限表
- 在 User 模型中添加 HasRoles trait
- 添加 isSuperAdmin 和 isAdmin 辅助方法
- 创建 PermissionSeeder 定义 45 个权限
- 创建 3 个预设角色(super-admin、admin、user)
- 为角色分配相应权限
- 为第一个用户分配超级管理员角色
This commit is contained in:
2026-03-11 09:55:40 +08:00
parent 7a4fa7cc18
commit 7d13a560f3
9 changed files with 1042 additions and 129 deletions

View File

@@ -217,6 +217,148 @@
---
### 4. 权限管理系统
#### 4.1 用户故事
作为系统管理员,我需要能够灵活地为用户、角色和分组配置不同功能模块的访问权限,以便实现细粒度的权限控制和数据隔离。
#### 4.2 功能描述
实现基于角色、用户和分组的多维度权限管理系统,支持功能模块级和数据级权限控制。
#### 4.3 验收标准
- [ ] 角色管理
- [ ] 角色列表(名称、描述、权限数量、用户数量)
- [ ] 角色创建/编辑(名称、描述、权限配置)
- [ ] 角色删除(检查是否有关联用户)
- [ ] 预设角色(超级管理员、管理员、普通用户)
- [ ] 权限配置界面
- [ ] 按功能模块分组展示权限
- [ ] 权限类型viewAny列表、view详情、create创建、update编辑、delete删除、特殊操作
- [ ] 支持批量授权/撤销
- [ ] 权限继承关系展示
- [ ] 用户权限管理
- [ ] 用户角色分配(支持多角色)
- [ ] 用户特殊权限配置(覆盖角色权限)
- [ ] 用户分组关联
- [ ] 权限预览(显示用户的最终权限)
- [ ] 分组权限管理
- [ ] 分组数据访问权限(如专用知识库)
- [ ] 分组成员管理
- [ ] 跨分组访问控制
- [ ] 权限验证
- [ ] 菜单项根据权限动态显示/隐藏
- [ ] 操作按钮根据权限动态显示/隐藏
- [ ] API请求权限验证
- [ ] 数据查询自动应用权限过滤
#### 4.4 权限模块定义
使用 Spatie Permission 的命名约定module.action格式
- **文档管理**
- document.viewAny - 查看文档列表
- document.view - 查看文档详情
- document.create - 创建文档
- document.update - 编辑文档
- document.delete - 删除文档
- document.download - 下载文档
- **系统设置**
- system-setting.viewAny - 查看系统设置
- system-setting.view - 查看设置详情
- system-setting.update - 修改系统设置
- **操作日志**
- activity-log.viewAny - 查看操作日志
- activity-log.view - 查看日志详情
- activity-log.export - 导出日志
- **终端管理**
- terminal.viewAny - 查看终端列表
- terminal.view - 查看终端详情
- terminal.create - 创建终端
- terminal.update - 编辑终端
- terminal.delete - 删除终端
- terminal.sync - 同步终端配置
- **SOP模板**
- sop-template.viewAny - 查看SOP列表
- sop-template.view - 查看SOP详情
- sop-template.create - 创建SOP
- sop-template.update - 编辑SOP
- sop-template.delete - 删除SOP
- sop-template.publish - 发布SOP
- sop-template.archive - 归档SOP
- **分组管理**
- group.viewAny - 查看分组列表
- group.view - 查看分组详情
- group.create - 创建分组
- group.update - 编辑分组
- group.delete - 删除分组
- **用户管理**
- user.viewAny - 查看用户列表
- user.view - 查看用户详情
- user.create - 创建用户
- user.update - 编辑用户
- user.delete - 删除用户
- **角色管理**
- role.viewAny - 查看角色列表
- role.view - 查看角色详情
- role.create - 创建角色
- role.update - 编辑角色
- role.delete - 删除角色
#### 4.5 数据模型需求
使用 Spatie Laravel Permission 包提供的模型和表结构:
- **Role 模型**(角色)- 由 Spatie 包提供
- name: string角色名称如 super-admin
- guard_name: string守卫名称默认 web
- 关联关系belongsToMany(Permission)、belongsToMany(User)
- **Permission 模型**(权限)- 由 Spatie 包提供
- name: string权限名称如 document.create
- guard_name: string守卫名称默认 web
- 关联关系belongsToMany(Role)
- **model_has_permissions 表**(用户直接权限)- 由 Spatie 包提供
- permission_id: bigint
- model_type: string通常是 User
- model_id: bigint用户ID
- **model_has_roles 表**(用户角色关联)- 由 Spatie 包提供
- role_id: bigint
- model_type: string通常是 User
- model_id: bigint用户ID
- **role_has_permissions 表**(角色权限关联)- 由 Spatie 包提供
- permission_id: bigint
- role_id: bigint
Spatie 包会自动创建这些表和模型,无需手动创建。
#### 4.6 技术实现
- 使用 **Spatie Laravel Permission** 包实现权限管理
- 包提供的核心功能:
- Role角色模型和管理
- Permission权限模型和管理
- 用户角色和权限关联
- 权限检查方法hasPermissionTo、hasRole等
- 中间件支持role、permission
- Blade指令支持@role@can等
- 使用 Laravel Policy 实现业务逻辑权限验证
- 使用 Gate 定义额外的权限规则
- 在 Filament Resource 中集成权限检查
- 权限缓存自动管理
---
## 技术栈
- **后端框架**: Laravel 12
@@ -237,7 +379,12 @@
- 所有操作需要身份验证
- 敏感配置API密钥需要加密存储
- 操作日志不可删除,只能归档
- 权限控制:系统设置仅管理员可访问
- **权限管理**
- 支持基于角色的权限控制RBAC
- 支持基于用户的权限控制
- 支持基于分组的权限控制
- 功能模块级别的权限控制(查看、创建、编辑、删除、特殊操作)
- 数据级别的权限控制(如文档的全局/专用访问)
### 可用性要求
- 界面响应式设计支持1920x1080及以上分辨率
@@ -256,13 +403,14 @@
### Composer包
```bash
composer require spatie/laravel-activitylog
composer require spatie/laravel-permission # 权限管理包
composer require amidesfahani/filament-monaco-editor
composer require maatwebsite/excel # 用于日志导出
```
### 数据库表
- system_settings
- activity_log
- activity_log(由 spatie/laravel-activitylog 创建)
- terminals
- terminal_knowledge_bases
- terminal_prompts
@@ -271,6 +419,11 @@ composer require maatwebsite/excel # 用于日志导出
- sop_steps
- sop_interactive_tasks
- sop_template_versions
- roles由 spatie/laravel-permission 创建)
- permissions由 spatie/laravel-permission 创建)
- model_has_permissions由 spatie/laravel-permission 创建)
- model_has_roles由 spatie/laravel-permission 创建)
- role_has_permissions由 spatie/laravel-permission 创建)
## 实施优先级