使用中間件保護路由
ACL 確定控制器是否有資源方法 (index, create, store, 等) 能岩,或者是 RESTful挥吵。
如果方法名不是資源(即非 index, create, store)嗓违,則會檢查 RESTful (HTTP 方法 GET, POST, PUT, DELETE)。
如果你的項目中這些都不可用,則必須定義包含方法的數(shù)組類型的 protect_methods
參數(shù)助隧,這些方法是需要在 crud 中被保護的唆香。
例如嫌变,用戶查看內(nèi)容時是一個 GET 請求,所以 ACL 會檢查它是否是資源方法躬它,如果不是則檢查 restful 并得知它是 GET 方法腾啥,則 view
被保護,因此用戶必須要有 view.user
權(quán)限冯吓。
如果你傳入 protect_methods
碑宴,可以通過定義你自己的方法名來保護資源。
[
'create' => ['store'], // protects store() method on create.user (create.alias)
'view' => ['index', 'create', 'show', 'edit'], // protects index(), create(), show(), edit() methods on view.user permission.
'update' => ['update'],
'delete' => ['destroy']
]
參數(shù)定義
- 驗證用戶是否擁有角色桑谍,
['is' => 'administrator']
- 驗證用戶是否擁有權(quán)限延柠,
['can' => 'view.admin, update.user']
- 保護控制器方法,
['protect_alias' => 'user']
锣披,會使用權(quán)限的別名user
并基于這個別名的權(quán)限保護 crud 方法贞间。
舉個栗子,如果用戶有查看的權(quán)限但沒有更新的權(quán)限雹仿,則允許 HTTP GET 方法但不允許 PUT增热。
如果你需要保護自己的控制器方法,你可以將它們定義為一個數(shù)組胧辽。
['protect_alias' => 'user',
'protect_methods' => [
'create' => ['someMethod', 'anotherMethod'],
'read' => ['readMethod', 'showMethod'],
'view' => ['readMethod', 'showMethod'], // its same as read.
'update' => ['editMethod'],
'delete' => ['destroyMethod']
]];
保護路由組/資源
要保護路由很容易峻仇。下面的例子檢查用戶是否有 administrator
角色。
Route::group(['prefix' => 'user',
'middleware' => ['auth', 'acl'],
'is' => 'administrator'],
function () {
Route::resource('user', 'UsersController');
});
或者檢查用戶是否有 administrator
角色并有 create.user, delete.user
的權(quán)限邑商。
Route::group(['prefix' => 'user',
'middleware' => ['auth', 'acl'],
'is' => 'administrator',
'can' => 'create.user, delete.user'],
function () {
Route::resource('user', 'UsersController');
});
或者通過 user
權(quán)限別名保護 crud 方法摄咆。
Route::group(['prefix' => 'user',
'middleware' => ['auth', 'acl'],
'is' => 'administrator',
'can' => 'do.something',
'protect_alias' => 'user'],
function () {
Route::resource('user', 'UsersController');
});
保護路由
保護一個單獨的路由和保護路由組的設(shè)置一樣簡單。只需要使用相同的權(quán)限參數(shù)人断。
Route::get('/dashboard', [
'uses' => 'DashboardController@index',
'middleware' => ['auth', 'acl'],
'is' => 'administrator',
'can' => 'view.dashboard']);
或者通過 dashboard
權(quán)限別名保護 crud 方法吭从。
Route::get('/dashboard', [
'uses' => 'DashboardController@index',
'middleware' => ['auth', 'acl'],
'is' => 'administrator',
'protect_alias' => 'dashboard']);