加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – 需要在单个资源控制器中使用Entrust角色的建议 – Larave

发布时间:2020-12-14 19:47:11 所属栏目:大数据 来源:网络整理
导读:我正在开发一个控制面板应用程序,我有几个用户角色,如globaladmin,编辑器等.现在我想用一个UserController资源使用这些角色. 例如,globaladmins应该能够执行所有Restful方法,而编辑器只能查看和更新??用户. 我知道委托带有开箱即用的中间件,这非常适合我需要
我正在开发一个控制面板应用程序,我有几个用户角色,如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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读