Laravel安装permission扩展包实现RBAC

1、composer安装laravel-permission扩展包

composer require spatie/laravel-permission

生成数据表

php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"

在 migration 目录下可看到相关表信息,执行数据库迁移

php artisan migrate
image.png

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

image.png

角色也可以同步:
删除某个用户,可以删除对应的角色,传参数则代表移除并替换为给定的数组

$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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容