【问题标题】:User role wise permission for controller function in laravellaravel 中控制器功能的用户角色权限
【发布时间】: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


【解决方案1】:

使用https://github.com/Zizaco/entrust

Entrust 是一种简洁灵活的方式,可以将基于角色的权限添加到 Laravel 5。

【讨论】:

    猜你喜欢
    • 2012-07-07
    • 1970-01-01
    • 2021-02-21
    • 2014-11-30
    • 1970-01-01
    • 2020-11-04
    • 2014-09-15
    • 2020-12-17
    • 2017-09-13
    相关资源
    最近更新 更多