1、composer安装laravel-permission扩展包
composer require spatie/laravel-permission
生成数据表
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
在 migration 目录下可看到相关表信息,执行数据库迁移
php artisan migrate
2、配置文件
接下来将扩展包提供的权限配置文件 permission.php 发布到 config 目录下以便对默认配置进行修改:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
在 User 模型下加载
.....
use Spatie\Permission\Traits\HasRoles; // use
class User extends Authenticatable
{
use HasRoles; // 加载角色相关信息
.....
创建角色
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Role;
class RoleController extends Controller
{
//创建角色
public function create(){
$role = Role::create(request(['name']));
}
}
创建权限
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Spatie\Permission\Models\Permission;
class PermissionController extends Controller
{
//创建权限
public function create(){
$permission = Permission::create(request(['name']));
}
}
用户分配角色
#$user->assignRole(['writer', 'admin']);
$user = auth('api')->user();
$role = Role::get();
$user->assignRole($role);
可以从用户中删除角色:
#$role_id = Role::find($id)->id;
$user->removeRole($role_id);
注意:查看源码这里传入的是一个id或name值,多个值需要foreach
角色也可以同步:
删除某个用户,可以删除对应的角色,传参数则代表移除并替换为给定的数组
$user->syncRoles();
$user->syncRoles($role);
角色分配权限
可以使用以下方法之一将权限分配给角色:
$role->givePermissionTo($permission);
$permission->assignRole($role);
可以使用以下方法之一将多个权限同步到一个角色:
$role->syncPermissions($permissions);
$permission->syncRoles($roles);
可以使用以下方法之一从角色中删除权限:
$role->revokePermissionTo($permission);
$permission->removeRole($role);
用户分配权限
$user->givePermissionTo($permission);
可以撤消用户的权限:
$user->revokePermissionTo($permission);
或一次性撤消并添加新权限:
$user->syncPermissions($permission);
列出所有权限
// Direct permissions
$user->getDirectPermissions() // Or $user->permissions;
// Permissions inherited from the user's roles
$user->getPermissionsViaRoles();
// All permissions which apply on the user (inherited and direct)
$user->getAllPermissions();
https://docs.spatie.be/laravel-permission/v3/introduction/
laravel-permission