Laravel使用中介軟體進行許可權控制
先看 文件
Laravel 中介軟體提供了一種方便的機制來過濾進入應用的 HTTP 請求。
這裡實現一個只有admin角色才能訪問特定路由的功能
- 新建middleware
php artisan make:middleware MustBeAdmin
- 開啟生成的
appHttpMiddlewareMustBeAdmin.php
修改handle方法
關於hasRole方法上一篇有講解
這裡在請求前判斷使用者角色是否是admin,如果條件滿足進到下一個中介軟體。不滿足返回首頁。
public function handle($request, Closure $next)
{
// 前置
if ($request->user()->hasRole(`admin`)) {
return $next($request);
}
return redirect(`/`);
}
-
讓系統識別中介軟體。開啟
appHttpKernel
在 $routeMiddleware 陣列裡追加`mustAdmin` => AppHttpMiddlewareMustBeAdmin::class,
-
關於中介軟體的呼叫非常靈活,比如
- 在 routesweb.php 中
Route::resource(`posts`, `PostsController`)->middleware(`mustAdmin`);
- 在控制器中
class PostsController extends Controller
{
public function __construct()
{
$this->middleware(`mustAdmin`, [`only` => `show`]);
}
...
- 專案中用到過的中介軟體
例1
在route中定義哪些角色可以訪問,通過 role:ADMIN,TEACHER
知,role是中介軟體名字,後面的 ADMIN,TEACHER
是引數。
routes.php
Route::group([`middleware` => [`web`, `auth`, `role:ADMIN,TEACHER`], `namespace` => `StudentTracGuidesControllers`],
function () {
Route::resource(`guides`, `GuidesController`, [`only` => [`index`]]);
Route::resource(`guides/admin`, `AdminController`, [`only` => [`index`, `edit`]]);
}
);
/app/Http/Middleware/Role.php
public function handle($request, Closure $next, $role)
{
// [`ADMIN`, `TEACHER`]
$roles = func_get_args();
$roleIds = [];
// 根據role名字拿到對應的id
foreach ($roles as $index => $role) {
// 為什麼這麼判斷我也忘了
if ($index < 2) continue;
$roleIds[] = config(`roles.` . trim($role));
}
// 判斷當前使用者的roleId是否存在
if (! in_array((int)$this->auth->user()->RoleId, $roleIds)) {
return response(`Unauthorized`, 403);
}
return $next($request);
}
config/roles.php
return [
/*
* Role id for role.
*/
`ADMIN` => 1,
`STUDENT` => 2,
`GUARDIAN` => 3,
`TEACHER` => 4,
`SUPPORTSTAFF` => 5,
`AUDITOR` => 6,
`CURRICULUM` => 7,
`CLIENTADMINISTRATOR` => 8,
];
相關文章
- 使用 Casbin 作為 ThinkPHP 的許可權控制中介軟體PHP
- Laravel學習筆記六-許可權管理與中介軟體MiddlewareLaravel筆記
- Laravel實現許可權控制Laravel
- Laravel——使用者角色許可權控制包 Laravel-permissionLaravel
- 小知識:軟體開發的許可權控制和許可權驗證
- Laravel中使用路由控制許可權(不限於Laravel,只是一種思想)Laravel路由
- Laravel 中使用路由控制許可權 (不限於 Laravel,只是一種思想)Laravel路由
- 使用者角色許可權控制包 Laravel-permission 使用說明Laravel
- 使用者角色許可權控制包 Laravel-permission 使用筆記(Laravel5+)Laravel筆記
- SpringBoot--- SpringSecurity進行登出,許可權控制Spring BootGse
- 域使用者許可權|安裝軟體
- Elasticsearch 許可權控制Elasticsearch
- Laravel 中介軟體Laravel
- Oracle軟體許可權修復Oracle
- 使用nginx控制ElasticSearch訪問許可權NginxElasticsearch訪問許可權
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- Linux許可權控制Linux
- Appfuse:許可權控制APP
- Laravel 中介軟體原理Laravel
- MYSQL學習筆記13: DCL許可權控制(使用者許可權操作)MySql筆記
- 安裝laravel許可權包Laravel
- Laravel 許可權 Policy 學習Laravel
- laravel8.5使用laravel-permission新增使用者許可權管理Laravel
- Laravel 中介軟體使用及原始碼分析Laravel原始碼
- Linux下ACL許可權控制以及用sudo設定使用者對命令的執行許可權Linux
- Laravel-Casbin:在 Laravel 裡使用 Casbin(PHP 許可權管理框架)LaravelPHP框架
- Vue 前端許可權控制的優化改進版Vue前端優化
- k8s結合jumpserver做kubectl許可權控制 使用者在多個namespaces的訪問許可權 rbac許可權控制K8SServernamespace訪問許可權
- mysql 許可權控制筆記MySql筆記
- oracle列級許可權控制Oracle
- Linux的許可權控制Linux
- .NET 程式許可權控制、獲得管理員許可權程式碼
- 關於 Laravel 日誌許可權Laravel
- win10軟體許可權怎麼設定_win10軟體系統許可權限制如何操作Win10
- MySQL使用者許可權控制一例MySql
- SQLServer控制使用者訪問許可權表SQLServer訪問許可權
- 使用中介軟體記錄Laravel慢請求Laravel
- Vue 前端應用進行身份認證許可權控制的一種方法Vue前端