我正在使用控制面板应用程序,其中我具有多个用户角色,例如globaladmin,编辑器等。现在,我想将这些角色与单个UserController资源一起使用。
例如,globaladmins应该能够执行所有Restful方法,而编辑者只能查看和更新用户。
我知道委托与中间件一起提供,非常适合我的需求。但是它仅在路由上起作用(在这种情况下,我需要为每个角色使用单独的控制器)。
我的UserController看起来像这样。
Class UserController extends BaseController
{
$protected $viewfolder;
public function __construct
{
// Checking for role and then assigning the folder name of the views
$role = User::getRole();
switch($role)
case 'globaladmin':
$this->viewfolder = 'globaladmin';
break;
case 'editor':
$this->viewfolder = 'editor';
break;
default:
abort(401, 'Access Denied');
break;
}
public function index(){
if( Entrust::can('view-all-users') ){
$users = User:all();
}
return view( $this->viewfolder.'.users.viewuser', compact('users'));
}
public function create()
public function update()
public function delete()
}
我在构造函数中需要一个中间件,该中间件将检查用户角色,然后仅在角色具有使用权限的情况下才允许使用该方法。但这应该以一种体面的方式完成,不要有任何黑客,因为我也将在其他控制器上使用它。
我假设您在路由文件中使用以下内容:
Route::resource('users', 'UserController');
在这种情况下,我建议您使用Entrust提供的一种中间件作为基础并检索被调用的方法,例如,如果使用EntrustRole:
public function handle($request, Closure $next)
{
$controllerMethod = Route::segment(3);
$roles = $this->retrieveRequiredRolesForMethod($method);
if ($this->auth->guest() || !$request->user()->hasRole(explode('|', $roles))) {
abort(403);
}
return $next($request);
}
当然,这只是一个提示,您应该找到一种更好的方法来提取被调用的方法,并且仍然需要实现 retrieveRequiredRolesForMethod
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句