Не удается ограничить доступ к маршрутам диспетчера разрешений с помощью промежуточного программного обеспечения на основе ролей - PullRequest
0 голосов
/ 03 апреля 2019

PHP 7.3 Ларавел 5.8 Рюкзак Laravel 3.6

Я пытаюсь использовать промежуточное программное обеспечение 'role:admin' в моем файле routes/backpack/permissionmanager.php, чтобы ограничить доступ к областям «Пользователь», «Роли» и «Разрешения» рюкзака для группы пользователей с определенными ролями.

Я убедился, что моей учетной записи предоставлена ​​правильная роль.

Моя '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 для моей учетной записи пользователя и роли, которую я хочу.

Однако переход к myapp.dev/admin/user приводит к 403 Forbidden.

Я думаю, что это может быть ошибка или что-то, что я не вижу правильно ...?

...