SuperAPI AI 工具集

laravel-permission-development

编程与开发

查看项目

更新于 10-15 22:10

技能介绍

用途:在 Laravel 项目中使用 spatie/laravel-permission 处理授权、角色、权限、访问控制、中间件守卫与 Blade 权限指令。

核心概念:用户拥有角色,角色拥有权限,应用检查权限而非角色;直接给用户分配权限是反模式,应把权限分配给角色;统一用 $user->can('permission-name') 做授权检查(支持通过 Gate 实现的超级管理员);User 模型需引入 HasRoles trait(内含 HasPermissions)。

主要能力:创建角色与权限(Role::create、Permission::create,findOrCreate 幂等可用于 seeder);分配与同步角色权限(assignRole、syncRoles、removeRole、givePermissionTo、syncPermissions、revokePermissionTo);检查权限与角色(can、canAny、hasPermissionTo、hasAnyPermission、hasAllPermissions、hasDirectPermission、hasRole、hasAnyRole、hasAllRoles、hasExactRoles);获取角色与权限集合(getRoleNames、getPermissionNames、getDirectPermissions、getPermissionsViaRoles、getAllPermissions);查询作用域(role、withoutRole、permission、withoutPermission)。

使用方式:在 bootstrap/app.php 注册中间件别名 role、permission、role_or_permission,路由中用 permission:edit articles、role:manager|writer 等,管道符表示 OR,可指定 guard 如 role:manager,api;单权限也可用 Laravel 内置 can 中间件。Blade 中优先用 @can、@canany,@role、@hasanyrole 仅用于超级管理员类检查。超级管理员在 AppServiceProvider::boot() 用 Gate::before 返回 true 或 null。策略方法内用 $user->can() 检查权限。支持枚举、Seeder(需 forgetCachedPermissions 清缓存)、Teams 多租户(config 中 'teams' => true,setPermissionsTeamId,切换团队时 unsetRelation)、事件('events_enabled' => true)。

限制:权限自动缓存,直接操作数据库后需手动调用 forgetCachedPermissions;批量 seeding 可用 Permission::insert() 提速但之后要清缓存;Teams 需在迁移前启用。资料未提供安装命令、版本要求与价格信息。