我使用laravel-modules创建了一个名为Article
的新模块。一些后端路由需要身份验证,我添加了auth
中间件和附加权限view_backend
。我正在使用https://github.com/spatie/laravel-permission软件包进行角色许可。
问题是,当我尝试访问路由admin/article/posts
时,会提示我按预期进行登录。但是登录后,它在__construct()
的{{1}}方法上显示为空;
我添加了#204中提到的Auth::user()
中间件,但没有解决问题。你能指导我解决这个问题吗?我的项目是在Laravel 5.6上并使用最新版本的Laravel-Modules
web
我的项目托管在Github,https://github.com/nasirkhan/laravel-starter/tree/module
答案 0 :(得分:0)
首先,将Spatie Middleware添加到您的内核中:
protected $routeMiddleware = [
// ...
'role' => \Spatie\Permission\Middlewares\RoleMiddleware::class,
'permission' => \Spatie\Permission\Middlewares\PermissionMiddleware::class,
];
然后在您的控制器中检查权限或角色:
public function __construct(Request $request)
{
$this->middleware(['permission: order.index']);
}
现在,您可以使用$ request-> user()来访问已验证的身份,例如:
public function create(Request $request)
{
if ($request->user()->hasRole('admin')) {
// return view("carmodel.create", ["manufacturers"=>$manufacturers]);
} else {
return view("admin.error", ['code'=>'001','msg'=>'err']);
}
}
答案 1 :(得分:0)
根据文档:
在以前的Laravel版本中,您可以在控制器的构造函数中访问会话变量或经过身份验证的用户。从来没有打算将其作为框架的显式功能。在Laravel 5.3中,由于中间件尚未运行,因此无法在控制器的构造函数中访问会话或经过身份验证的用户。
作为替代方案,您可以直接定义基于Closure的中间件 在控制器的构造函数中。使用此功能之前,请确保 您的应用程序正在运行Laravel 5.3.4或更高版本:
public function __construct()
{
$this->middleware(function ($request, $next) {
$this->projects = Auth::user()->projects;
return $next($request);
});
}
或者您可以键入提示:
public function index(Request $request)
{
$projects = $request->user()->projects;
$value = $request->session()->get('key');
}