在 Laravel 中用户授权后创建全局权限变量
Creating global permissions variable after user authorization in Laravel
我想在用户通过身份验证后设置全局变量 - 让我们称之为 permissions
。该变量应该在控制器和视图中可用。
实现它的最佳方法是什么?现在,在每种方法中,我都必须执行数据库查询并检查不是最佳的用户角色。
我知道我可以在appserviceprovider中声明view::share
方法来将变量传递给视图,但是boot方法是在用户通过身份验证后执行的。
更新
我创建了从 Controller 扩展而来的 BaseController。
基地控制器:
class BaseController extends Controller {
public $permissions;
public function __construct() {
$this->permissions = GroupRoles::where('id', Auth::user()->id)->first();
}
}
然后我试图从 BaseController 扩展的 UserController 访问权限变量。正在尝试获取非对象的访问权限。我想是因为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
我想在用户通过身份验证后设置全局变量 - 让我们称之为 permissions
。该变量应该在控制器和视图中可用。
实现它的最佳方法是什么?现在,在每种方法中,我都必须执行数据库查询并检查不是最佳的用户角色。
我知道我可以在appserviceprovider中声明view::share
方法来将变量传递给视图,但是boot方法是在用户通过身份验证后执行的。
更新
我创建了从 Controller 扩展而来的 BaseController。
基地控制器:
class BaseController extends Controller {
public $permissions;
public function __construct() {
$this->permissions = GroupRoles::where('id', Auth::user()->id)->first();
}
}
然后我试图从 BaseController 扩展的 UserController 访问权限变量。正在尝试获取非对象的访问权限。我想是因为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