在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
我用它创建了BaseController和构造函数。但我仍然无法从UserController访问权限变量。我认为我应该做更多的事情。因为我正在尝试获取非对象属性的错误。所以这个问题仍然与认证有关。 –
但是你试着从套装中设置Permssion吗?用户控制器必须扩展BaseController,以便获得它。或者,首先尝试在构造函数中转储var,以便确保所需的数据在那里。 –
UserController扩展了BaseController。 BaseController扩展了Controller。我得到这个错误是因为构造方法在Auth方法被加载之前调用,或者我不知道如何调用它。 BaseController在构造函数中有以下代码:'$ this-> permissions = GroupRoles :: where('id',Auth :: user() - > id) - > first();' –