функция взрыва не работает в промежуточном программном обеспечении Laravel - PullRequest
0 голосов
/ 03 июля 2018

Я занимаюсь разработкой системы ACL Laravel. У меня есть таблица пользователей, таблица ролей и таблица разрешений. Когда я проверяю предоставленные пользователю разрешения с использованием промежуточного программного обеспечения и внутри промежуточного программного обеспечения, я использую функцию explode(). эта функция показывает только первые разрешения, которые другие разрешения не содержат.

Вот мой контроллер;

function __construct()
{
    $this->middleware('auth');
    $this->middleware('HasPermission:Role-Read,Role-Update,Role-Delete');
}

My Middleware.

 public function handle($request, Closure $next,$permissions='')
{
    $permissions_array = explode(',', $permissions);
    dd($permissions_array);
    foreach($permissions_array as $permission){
        if(Auth::user()->hasPermission($permission)){
            return $next($request);
        }
    }

    return redirect()->back();;
}

результат при использовании функции dd().

array:1 [▼ 0 => "Role-Read" ]

1 Ответ

0 голосов
/ 03 июля 2018

Контроллер

$this->middleware('HasPermission:Role-Read,Role-Update,Role-Delete');

Middleware Использование ... для доступа к переменным аргументам

public function handle($request, Closure $next, ...$permissions)
    {
        foreach($permissions_array as $permission){
            if(Auth::user()->hasPermission($permission)){
                return $next($request);
            }
        }

        return redirect()->back();;
    }

или вы можете использовать

$this->middleware('HasPermission:Role-Read|Role-Update|Role-Delete');

Middleware

$permissions_array = explode('|', $permissions);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...