管理者 透過管理群組 group 來管理各個權限項目
關聯圖:
Laravel | package |
---|---|
8.X | 1.X |
9.X | 2.X |
你可以使用 composer 做安裝
composer require thoth-pharaoh/permission
Migrate 資料表
php artisan migrate
匯出 Config
php artisan vendor:publish --tag=permission-config
匯出 Migration
php artisan vendor:publish --tag=permission-database
必須先至 config/permission.php 設定權限內容
在欲使用權限管理的 model 引入 HasPermission Trait
use Pharaoh\Permission\Traits\HasPermission;
class User extends Authenticatable
{
use HasPermission;
}
管理者加入一個管理群組
$user->addGroup($groupId);
參數 | 說明 | 類型 | 範例 |
---|---|---|---|
$groupId | 管理群組ID | int | 1 |
獲取管理者所屬群組
$user->belongGroup();
使用 getPermissions 方法獲取該管理者所擁有的權限
$user->getPermissions();
使用 getPermissions 方法取得該群組的所有管理權限
$group->getPermissions();
使用 addPermissions 方法更新該管理群組的權限
$group->addPermissions($permissionKeys);
參數 | 說明 | 類型 | 範例 |
---|---|---|---|
$permissionKeys | 權限代碼 | array | [1101, 1102, 1103] |
$permissionKeys 代碼以 config.permission.php 中 items 內定義為主
使用 deleteGroup 方法刪除該管理群組及對應權限
$group->deleteGroup();
先註冊 permission middleware
App\Http\Kernel.php
protected $routeMiddleware = [
...
'permission' => \Pharaoh\Permission\Middleware\Permission::class
];
在需要檢查權限的路由加入 permission middleware 及 權限代碼(代碼以config.permission.php為主)
Route::middleware(['auth:user', 'permission:1102'])->get('/user', 'PostController@index');
檢查多組權限
Route::middleware(['auth:user', 'permission:1102,1103,1104'])->get('/user', 'PostController@index');
permission middleware 需設定至 auth middleware 之後
動態綁定 group 多對多 多行關聯
AppServiceProvider.php
public function boot()
{
// 動態綁定 groups <-> users 多對多 多型關聯
Group::resolveRelationUsing('users', function ($groupModel) {
return $groupModel->morphedByMany(User::class, 'groupable');
});
}
php artisan update:root-group-permission
root group 以 config.permission.php 中,欄位 root_group_name 名稱為主