1 、安装
composer require spatie/laravel-permission
1.1、发布
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
1.2、生成数据库
php artisan migrate
1.3、生成配置文件
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
2、操作及使用
注意事项
(1)判断一个用户是否拥有某个权限,前提是这个权限存在,如果权限不存在就去判断,会报500错误
(2)用户权限分为:继承权限(即从角色获得的权限)、直接权限(直接赋予的)
(3)最好不要使用laravel自带的登录注册
2.1、 在 modle User中 添加 trait
use HasRoles
2.2、 角色使用
#创建角色
$role=Role::create(['name'=>'writer']);
#给角色分配权限
$role=Role::findByName('writer');
$permission=Permission::findByName('edit_permission');
$role->givePermissionTo($permission);
//或者
$permission->assignRole($role);
2.3 、权限使用
#创建权限
Permission::create(['name'=>'edit_permission']);
#判断用户是否拥有以下的任何一个权限, (支持多个权限, 其中一个为true返回true)
$user->hasAnyPermission(['edit articles','publish articles','unpublish articles']);
$user->hasAnyPermission(['edit articles',1,5]);
#添加用户直接权限,同时删除用户其余所有的角色 (可 角色名称 或者 角色id,但是不能删除继承权限)
$user->syncPermissions(['edit articles', 'delete articles']);
#增加用户权限(用户 权限 关系表插入) (参数:权限, 可以一个,多个字符串逗号隔开,或者数组)
$user->givePermissionTo('edit articles');
#仅返回具有 'edit articles'(继承或直接)权限的用户,(包含角色分配 和 直接分配)
$users = User::permission('edit articles')->get();
2.4、用户使用
$users = Users::find(1);
2.4.1、用户使用权限
#判断用户是否拥有某个权限,可权限名称、或者权限ID
$user->hasPermissionTo('read_permission');
#获取用户的所有权限 (包含继承权限 和 直接权限的)
$user->getAllPermissions();
#获取直接权限
$user->getDirectPermissions(); // Or $user->permissions;
#获取用户角色继承的权限
$user->getPermissionsViaRoles();
#增加用户权限(用户 权限 关系表插入) (参数:权限, 可以一个,多个字符串逗号隔开,或者数组)
$user->givePermissionTo('edit articles');
#删除用户权限
$user->revokePermissionTo('read_permission');
2.4.2、用户使用角色
#判断用户是否有该角色
$user->hasRole('writer');
#判断用户是否有以下任何一个角色,有其中一个就返回true
$user->hasAnyRole(['writer','read']);
#获取该用户所有角色
$roles = $user->getRoleNames();
#增加用户角色 (用户 角色 关系表插入)(可分配一个或多个) (参数:角色id)
$user->assignRole(3);
#删除用户角色 (角色名称 或者 角色id)
$user->removeRole('writer');
#添加用户角色,同时删除用户其余所有的角色 (可 角色名称 或者 角色id)
$user->syncRoles([2])
#获取某个角色的所有用户
$users=User::role('writer')->get();
3、 laravel-psermission git 地址
网友评论