1. 程式人生 > >laravel permissions學習筆記

laravel permissions學習筆記

  1. permission擴充套件安裝

您可以通過composer安裝軟體包:

omposer require spatie/laravel-permission

在 Laravel 5.5 中,服務提供商將自動獲得註冊。 在舊版本的框架中,只需在 config/app.php 檔案中新增服務提供者即可:

'providers' => [
    // ...
    Spatie\Permission\PermissionServiceProvider::class,
];

你可以通過以下方式 釋出遷移 :

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

遷移釋出後,你可以通過執行遷移來建立角色和許可權表:

php artisan migrate

你可以釋出配置檔案:

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

2.使用

use Spatie\Permission\Models\Role;
use Spatie\Permission\Models\Permission;

//建立角色
//guard_name 選擇填,預設web. guard_name作用詳情 另行百度這裡不做過多闡述; 
Role::create(['name'=>'writer','guard_name'=>'api']);

//建立許可權
Permission::create(['name' => 'edit articles']);

//使用者賦予許可權
Bouncer::allow('admin')->to('ban-users');
//執行上面程式碼,Bouncer就會分別在roles表和abilities表中建立兩個記錄。

//使用者分配角色
$user->assignRole('writer');
$user->assignRole(['writer', 'admin']);

//把使用者的角色清空,再進行賦值下面引數內的角色
$user->syncRoles(['writer', 'admin']);

//刪除使用者的角色
$user->removeRole('writer');


//使用者賦予許可權
$user->givePermissionTo('edit articles');
$user->givePermissionTo('edit articles', 'delete articles');

//刪除使用者許可權
$user->revokePermissionTo('edit articles');

//刪除使用者所有許可權,在賦值以下引數許可權
$user->syncPermissions([ ' edit articles ',' delete articles ' ]);
//刪除使用者所有許可權,在賦值以下引數許可權
$role->syncPermissions([ ' edit articles ',' delete articles ' ]);

//判斷使用者是含有引數中的角色
$user->hasRole('writer');
//判斷使用者是否含有引數中,任一一種角色
$user->hasAnyRole(Role::all());
//判斷使用者是否有引數中所有角色
$user->hasAllRoles(Role::all());

//判斷使用者是否含有許可權
$user->hasPermissionTo(' edit articles ');
//判斷使用者是否含有任意一種許可權
$user->hasAnyPermission(['edit articles','publish articles','unpublish articles'];
//判斷使用者是否含有這引數內的許可權,(如果使用者沒有直接賦予許可權,但是賦予的角色含有的許可權也可以通過)
$user->can('edit articles');








3.總結

之前用過一些許可權管理的系統,但是用這款許可權管理框架之後感覺更靈活,更輕鬆;

許可權,角色(可以理解成使用者組),使用者 三者獨立,卻又息息相關。後面對系統更熟悉了之後又很打擴充套件潛力。

在安裝完成之後系統內會多出5張表,model_has_roles,roles,role_has_permission,permissions,model_has_permissions.如果不使用laravel提供的User表,也可以自行建立。在賦予關聯的時候使用對應的model就可以了;