【发布时间】:2017-08-30 15:08:21
【问题描述】:
我正在使用 laravel5.4。我需要为每种方法创建角色明智的权限。
这里我创建了一个中间件(roles),如下:
CheckRole.php
public function handle($request, Closure $next)
{
$role = array_slice(func_get_args(), 2);
if ( ! User::find(auth()->id())->hasAnyRole($role))
{
return response("Insufficient permission",401);
session()->flash('message',"You have no permission to access");
return redirect('/');
}
return $next($request);
}
我有一个控制器作为 CompanyController:
公司控制器.php
public function __construct()
{
$this->middleware(function (Request $request, $next)
{
$this->user = \Auth::User();
//print_r($this->user);exit;
if($this->user['userrole_id'] == 1)
{
$this->middleware('roles:superadmin');
}
else if ($this->user['userrole_id'] == 3)
{
$this->middleware('roles:supportperson',['only' => ['index']]);
}
return $next($request);
});
}
这里,如果登录用户是superadmin,他可以访问控制器的所有功能。如果登录用户是 supportperson 则他只能访问 index 方法。
那么如何使用相同的中间件为不同的角色设置权限?
【问题讨论】:
-
恕我直言 laravel 附带了一个完全可配置的授权系统。不需要自定义中间件。见这里:laravel.com/docs/5.4/authorization
-
@dparoli 我是 laravel 的新手,所以我不知道如何使用它。所以我使用中间件。
-
第一条规则是不要重新发明轮子,laravel 代码库是一头大野兽,在进行任何自定义之前请阅读文档。
-
@dparoli 好的。谢谢
标签: laravel