代码php扩展laravel-permission权限管理的使用
Alon安装
官方文档
安装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 文件中,修改对应的模型
<?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'; }
|
使用方法
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