1

我创建了一个Article使用laravel-modules命名的新模块。一些后端路由需要身份验证,我添加了auth中间件和额外的权限view_backend。我正在使用https://github.com/spatie/laravel-permission包来获取角色权限。

问题是当我尝试访问路由admin/article/posts时,它会按预期提示我登录。但是登录后它在__construct()方法上显示 null Auth::user();

我添加了#204web中提到的中间件,但它并没有解决问题。你能指导我解决这个问题吗?我的项目在 Laravel 5.6 上并使用最新版本的 Laravel-Modules

Route::group(['namespace' => 'Modules\Article\Http\Controllers\Backend', 'as' => 'backend.article.', 'middleware' => ['web', 'auth', 'can:view_backend'], 'prefix' => 'admin/article'], function () {

    Route::resource("posts", "PostsController");
});

我的项目托管在 Github,https://github.com/nasirkhan/laravel-starter/tree/module

4

2 回答 2

0

首先,将Spatie 中间件添加到您的内核中:

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']);
        }
    }
于 2018-06-21T07:24:51.480 回答
0

根据文档:

在之前的 Laravel 版本中,您可以在控制器的构造函数中访问会话变量或经过身份验证的用户。这从未打算成为框架的明确功能。在 Laravel 5.3 中,您无法在控制器的构造函数中访问会话或经过身份验证的用户,因为中间件尚未运行。

作为替代方案,您可以直接在控制器的构造函数中定义基于闭包的中间件。在使用此功能之前,请确保您的应用程序运行的是 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');
}

文档

于 2018-06-21T07:31:39.030 回答