laravel permissions學習筆記
阿新 • • 發佈:2019-02-01
-
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就可以了;