我正在开发一个控制面板应用程序,我有几个用户角色,如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() }
我需要在构造函数中使用一个中间件来检查用户角色,然后只有在角色有权使用它时才允许使用该方法.但是这应该以一种体面的方式完成,没有任何黑客攻击,因为我也将在其他控制器上使用它.
我假设您在路由文件中使用以下内容:
原文链接:https://www.f2er.com/laravel/136286.htmlRoute::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