必须先安装spatie/laravel-permission扩展包,运行composer require spatie/laravel-permission;再发布配置与迁移文件、执行php artisan migrate创建roles、permissions等表;接着在user模型中引入hasroles trait;最后通过seeder初始化角色与权限。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

安装laravel-permission扩展包
在Laravel项目中启用协作权限管理,必须先引入spatie/laravel-permission扩展包。这一步是整个权限系统的底层支撑,跳过会导致后续所有角色、权限操作无法执行。
在项目根目录终端运行:composer require spatie/laravel-permission。
该命令会下载并注册包依赖,若提示版本冲突,请检查当前Laravel版本(2026年主流为10.x或11.x),对应选用spatie/laravel-permission:^6.0及以上兼容版本。
发布迁移与配置文件
执行命令:php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"。
此操作会生成config/permission.php配置文件和数据库迁移文件。迁移文件默认存于database/migrations/目录下,文件名含_create_permission_tables.php。
【必须确认迁移文件已生成】,否则下一步执行php artisan migrate将报“无迁移文件”错误,且不会自动创建表结构。
执行数据库迁移
运行:php artisan migrate。
成功后,数据库中将新增三张表:roles、permissions、model_has_permissions(以及关联用户与角色的model_has_roles)。这些表是权限数据持久化的唯一载体。
如遇MySQL 5.7以下版本报错“Specified key was too long”,需在AppServiceProvider@boot中添加\Schema::defaultStringLength(191),再重试迁移。
在User模型中启用权限能力
打开app/Models/User.php(路径依Laravel版本可能为app/User.php)。
在类声明前添加:use Spatie\Permission\Traits\HasRoles;;在class User extends Authenticatable内部添加use HasRoles;。
这一步让User实例获得assignRole()、givePermissionTo()、hasRole()等方法。未添加则调用这些方法时抛出BadMethodCallException。
初始化协作角色与权限
创建一个seeder类:php artisan make:seeder RolesAndPermissionsSeeder。
编辑该文件,在run()方法中按协作场景定义最小必要集:
① 清除旧缓存:app()[\Spatie\Permission\PermissionRegistrar::class]->forgetCachedPermissions();
② 创建基础权限:例如Permission::create(['name' => 'view dashboard'])、Permission::create(['name' => 'edit own profile'])、Permission::create(['name' => 'manage team members'])。
③ 创建角色并分配权限:
— $member = Role::create(['name' => 'team member']); $member->givePermissionTo(['view dashboard', 'edit own profile']);
— $admin = Role::create(['name' => 'team admin']); $admin->givePermissionTo(Permission::all());
最后运行:php artisan db:seed --class=RolesAndPermissionsSeeder。











