在Laravel的用户授权后创建全局权限变量

问题描述:

我想在用户通过身份验证后设置全局变量 - 我们称之为permissions。变量应该在控制器和视图中可用。在Laravel的用户授权后创建全局权限变量

实现它的最好方法是什么?现在,在每种方法中,我必须执行数据库查询并检查不是最优的用户角色。

我知道我可以在appserviceprovider中声明view::share方法来将变量传递给视图,但是在用户通过身份验证后会执行引导方法。

更新

我创建BaseController从控制器的延伸。

BaseController:

class BaseController extends Controller { 

    public $permissions; 

    public function __construct() { 
     $this->permissions = GroupRoles::where('id', Auth::user()->id)->first(); 
    } 

} 

然后我试图访问从UserController中从BaseController扩展了权限变量。试图访问非对象。我认为这是因为BaseController构造函数是在中间件之前构造的。

class UserController extends BaseController { 

    public function showPermissions() { 
    return var_dump($this->permissions); 
    } 

} 

最终溶液

基础是在BaseController使用$this->middleware(function ($request, $next)。在控制器内

试试,或创建自己的BaseController然后把它扩展你的控制器,并在BaseController你可以做这样的

public $permissions; 

public function __construct() 
{ 
    $permissions = Permissions::all() //For example 
    $this->permissions = $permissions 
} 

然后你就可以从每一个控制器访问它像这样$this->permissions

+0

我用它创建了BaseController和构造函数。但我仍然无法从UserController访问权限变量。我认为我应该做更多的事情。因为我正在尝试获取非对象属性的错误。所以这个问题仍然与认证有关。 –

+0

但是你试着从套装中设置Permssion吗?用户控制器必须扩展BaseController,以便获得它。或者,首先尝试在构造函数中转储var,以便确保所需的数据在那里。 –

+0

UserController扩展了BaseController。 BaseController扩展了Controller。我得到这个错误是因为构造方法在Auth方法被加载之前调用,或者我不知道如何调用它。 BaseController在构造函数中有以下代码:'$ this-> permissions = GroupRoles :: where('id',Auth :: user() - > id) - > first();' –