安装
安装composer包
composer require spatie/laravel-permission
配置
- 生成迁移文件
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
- 运行迁移命令
php artisan migrate
- 生成配置文件
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
用户模型需使Spatie\Permission\Traits\HasRoles
,如果使用了其他guard,还需设置guard_name
属性
如果要扩展Role和Permission模型,需要继承扩展包的
Spatie\Permission\Models\Role
和Spatie\Permission\Models\Permission
,并在 项目根目录/config/permission.php 文件中,修改对应的模型
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51
| <?php
namespace App\Models;
use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Foundation\Auth\User as Authenticatable; use Illuminate\Notifications\Notifiable; use Spatie\Permission\Traits\HasRoles;
class Admin extends Authenticatable { use HasFactory, Notifiable,HasRoles;
protected $table = 'admins';
protected $fillable = [ 'name', 'phone', 'password', ];
protected $hidden = [ 'password', 'remember_token', ];
protected $casts = [ 'email_verified_at' => 'datetime', ]; protected $guard_name = 'jwt'; }
|
使用方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
| use App\Models\Admin; use Spatie\Permission\Models\Role; use Spatie\Permission\Models\Permission;
Permission::create('admin.index'); Permission::findOrCreate('admin.update');
$role = Role::create(['name' => '测试管理员']);
$role->givePermissionTo('admin.index','admin.update');
$role->syncPermissions(['admin.index','admin.store']);
$role->revokePermissionTo('admin.index');
$admin = new Admin();
$admin->givePermissionTo('admin.index','admin.update'); $admin->givePermissionTo(['admin.index','admin.update']);
$admin->syncPermissions(['admin.index','admin.store']);
$admin->revokePermissionTo('edit');
$admin->assignRole('测试管理员'); $admin->assignRole('测试管理员','测试管理员二号'); $admin->assignRole(['测试管理员','测试管理员二号']);
$admin->removeRole('测试管理员二号');
$admin->syncRoles(['测试管理员']);
$role->hasPermissionTo('admin.index');
$admin->hasRole('测试管理员');
$admin->hasAnyRole(['测试管理员','测试管理员二号']);
$admin->hasAllRoles(['测试管理员','测试管理员二号']);
$admin->hasPermissionTo('admin.index'); $admin->hasPermissionTo(1);
$admin->hasAnyPermission(['admin.index','admin.update']);
$admin->hasAllPermissions(['admin.index','admin.update']);
$permissions = $user->getAllPermissions();
$permissions = $user->getDirectPermissions();
$permissions = $user->getPermissionsViaRoles();
$roles = $user->getRoleNames();
|
ok,先这么多
我这边直接给项目的原中间件修改了一下,当然也可以用他提供的中间件RoleMiddleware
,PermissionMiddleware
,RoleOrPermissionMiddleware