1 、安裝
composer require spatie/laravel-permission
1.1、發(fā)布
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="migrations"
1.2、生成數(shù)據(jù)庫
php artisan migrate
1.3、生成配置文件
php artisan vendor:publish --provider="Spatie\Permission\PermissionServiceProvider" --tag="config"
2、操作及使用?
注意事項
?(1)判斷一個用戶是否擁有某個權(quán)限,前提是這個權(quán)限存在,如果權(quán)限不存在就去判斷,會報500錯誤
?(2)用戶權(quán)限分為:繼承權(quán)限(即從角色獲得的權(quán)限)、直接權(quán)限(直接賦予的)
?(3)最好不要使用laravel自帶的登錄注冊
2.1、 在 modle? User中 添加 trait
use HasRoles
2.2、 角色使用
#創(chuàng)建角色
$role=Role::create(['name'=>'writer']);
#給角色分配權(quán)限
$role=Role::findByName('writer');
$permission=Permission::findByName('edit_permission');
$role->givePermissionTo($permission);
//或者
$permission->assignRole($role);
2.3 、權(quán)限使用
#創(chuàng)建權(quán)限
Permission::create(['name'=>'edit_permission']);
#判斷用戶是否擁有以下的任何一個權(quán)限,?(支持多個權(quán)限, 其中一個為true返回true)
$user->hasAnyPermission(['edit articles','publish articles','unpublish articles']);
$user->hasAnyPermission(['edit articles',1,5]);
#添加用戶直接權(quán)限,同時刪除用戶其余所有的角色?(可 角色名稱 或者 角色id,但是不能刪除繼承權(quán)限)?
$user->syncPermissions(['edit articles', 'delete articles']);?
#增加用戶權(quán)限(用戶 權(quán)限 關(guān)系表插入) (參數(shù):權(quán)限, 可以一個,多個字符串逗號隔開,或者數(shù)組)?
$user->givePermissionTo('edit articles');??
#僅返回具有 'edit articles'(繼承或直接)權(quán)限的用戶,(包含角色分配 和 直接分配)?
$users = User::permission('edit articles')->get();??
2.4、用戶使用
$users = Users::find(1);
?2.4.1、用戶使用權(quán)限
#判斷用戶是否擁有某個權(quán)限,可權(quán)限名稱、或者權(quán)限ID
$user->hasPermissionTo('read_permission');
#獲取用戶的所有權(quán)限 (包含繼承權(quán)限 和 直接權(quán)限的)
$user->getAllPermissions();?
#獲取直接權(quán)限?
$user->getDirectPermissions();?// Or $user->permissions;?
?#獲取用戶角色繼承的權(quán)限
?$user->getPermissionsViaRoles();??
#增加用戶權(quán)限(用戶 權(quán)限 關(guān)系表插入) (參數(shù):權(quán)限, 可以一個,多個字符串逗號隔開,或者數(shù)組)
$user->givePermissionTo('edit articles');?
#刪除用戶權(quán)限
$user->revokePermissionTo('read_permission');
2.4.2、用戶使用角色
#判斷用戶是否有該角色
$user->hasRole('writer');
#判斷用戶是否有以下任何一個角色,有其中一個就返回true
$user->hasAnyRole(['writer','read']);
#獲取該用戶所有角色
$user->getRoleNames();?
#增加用戶角色 (用戶 角色 關(guān)系表插入)(可分配一個或多個) (參數(shù):角色id)
$user->assignRole(3);?
#刪除用戶角色 (角色名稱 或者 角色id) 注意:刪除前 必須提前定義?guard_name
$user-> guard_name = "admin";
$user->removeRole('writer');?
#添加用戶角色,同時刪除用戶其余所有的角色?(可 角色名稱 或者 角色id)
$user->syncRoles([2])
#獲取某個角色的所有用戶
$users=User::role('writer')->get();
3、 laravel-psermission git 地址