首页 > 解决方案 > 无法使用基于角色的中间件限制对权限管理器路由的访问

问题描述

PHP 7.3 Laravel 5.8 Laravel 背包 3.6

我正在尝试'role:admin'在我的routes/backpack/permissionmanager.php文件中使用中间件,将对 Backpack 的用户、角色和权限区域的访问限制为具有某些角色的用户子集。

我已确保我的用户帐户已被授予正确的角色。

我的'user'模型config/backpack/permissionmanager.php设置为,App\User::class并且我的User模型具有并使用文档中概述的必要特征。

我在role我的应用程序中放置了一个中间件,如下所示:

<?php

namespace App\Http\Middleware;

use Closure;

class RoleMiddleware
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next, $role)
    {
        if (backpack_auth()->guest()) {
            return redirect('login');
        }

        if (! backpack_user()->hasRole($role)) {
            abort(403);
        }

        return $next($request);
    }
}

然而,似乎这个中间件backpack_user()虽然通过正确的属性返回知道我是谁->name,但完全不知道我应该分配给自己的角色或权限。我已经使用该->getRoleNames()方法进行了检查,它返回一个空集合。

在数据库中,model_has_roles为我的用户帐户和我想要的角色在表中设置了正确的条目和 ID。

但是,导航到myapp.dev/admin/user结果为403 Forbidden.

我认为这可能是一个错误,或者我不能正确看到的东西......?

标签: laravel-backpacklaravel-permission

解决方案


推荐阅读