Laravel-permission 是一个常用的 Laravel 第三方权限扩展包,本文讲解一下这个包在Laravel中的基础使用方法(本文假设您已安装好Laravel)。
一、安装
1.通过 composer 安装:
composer require spatie/laravel-permission
2.Laravel-permission 会自动注册服务提供者,你也可以在 config/app.php 文件中手动注册服务提供者:
'providers' => [
// ...
Spatie\Permission\PermissionServiceProvider::class,
];
3.发布文件:
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider"
4.清空缓存:
php artisan optimize:clear
# 或者
php artisan config:clear
5.执行迁移:
php artisan migrate
二、基础使用
1.调用trait:
// 在 User Model 中调用 HasRoles trait
use HasRoles;
2.创建“角色”或“权限”:
use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;
$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