Laravel-permission 是一个常用的 Laravel 第三方权限扩展包,本文讲解一下这个包在Laravel中的基础使用方法(本文假设您已安装好Laravel)。

一、安装

1.通过 composer 安装:

composer require spatie/laravel-permission

2.Laravel-permission 会自动注册服务提供者,你也可以在 config/app.php 文件中手动注册服务提供者:

'providers' => [
    // ...
    SpatiePermissionPermissionServiceProvider::class,
];

3.发布文件:

php artisan vendor:publish --provider="SpatiePermissionPermissionServiceProvider"

4.清空缓存:

 php artisan optimize:clear
 # 或者
 php artisan config:clear

5.执行迁移:

 php artisan migrate

二、基础使用

1.调用trait:

// 在 User Model 中调用 HasRoles trait
use HasRoles;

2.创建“角色”或“权限”:

use SpatiePermissionModelsRole;
use SpatiePermissionModelsPermission;

$role = Role::create(['name' => 'writer']);
$permission = Permission::create(['name' => 'edit articles']);

3.将一个“权限”分配给“角色”(以下两种方式均可):

$role->givePermissionTo($permission);
$permission->assignRole($role);

4.将一组“权限”分配给“角色”(以下两种方式均可):

$role->syncPermissions($permissions);
$permission->syncRoles($roles);

5.从“角色”中移除“权限”(以下两种方式均可):

$role->revokePermissionTo($permission);
$permission->removeRole($role);

6.其他用法:

// 获得直接分配给用户的所有权限的列表
$permissionNames = $user->getPermissionNames(); // 权限名称集合
$permissions = $user->permissions; // 权限对象集合

// 获取用户的所有权限,可以直接获取,也可以从角色中获取,或者从两者中获取。
$permissions = $user->getDirectPermissions(); //直接获取
$permissions = $user->getPermissionsViaRoles(); //通过角色获取
$permissions = $user->getAllPermissions(); //包含上面两种方式

// 获取用户角色名称
$roles = $user->getRoleNames(); // 返回一个集合

// 查询具有指定角色或权限的数据 
$users = User::role('writer')->get(); // 返回具有“writer”角色的用户集合
$users = User::permission('edit articles')->get(); // 返回具有“edit articles”权限的用户集合

//角色和权限是基于 eloquent 模型而来,因此也可以使用下列方式查询
$all_users_with_all_their_roles = User::with('roles')->get();
$all_users_with_all_direct_permissions = User::with('permissions')->get();
$all_roles_in_database = Role::all()->pluck('name');
$users_without_any_roles = User::doesntHave('roles')->get();
$all_roles_except_a_and_b = Role::whereNotIn('name', ['role A', 'role B'])->get();

三、更多用法

更多用法参加官网:https://spatie.be/docs/laravel-permission/v5/introduction