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:
@@ -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 创建)
|
||||
|
||||
## 实施优先级
|
||||
|
||||
|
||||
Reference in New Issue
Block a user