Laravel, добавьте ворота, чтобы увидеть, есть ли у пользователя доступ - PullRequest
1 голос
/ 08 мая 2019

У меня есть таблица с моими разрешениями, я хочу иметь возможность настроить маршрут, как показано ниже, чтобы я проверял разрешения вошедших в систему пользователей и проверял, например, есть ли у них доступ к странице edit_users.

Route::group([ 'prefix' => 'users', 'middleware' => 'can:access,edit_users' ], static function() {

Я добавил следующие Врата, где я бы сделал свой запрос и проверил, однако $permission - это ноль ...

public function boot()
{
    $this->registerPolicies();

    Gate::define('access', static function ($user, $permission) {
        dd($user, $permission);
    });
}

Как мне поступить так??Поскольку я не хочу жестко кодировать все разрешения в ворота!

1 Ответ

1 голос
/ 08 мая 2019

Промежуточное ПО по умолчанию передает параметр маршрута в качестве второго аргумента.Я думаю, что в этом случае вам нужно написать собственное промежуточное программное обеспечение, которое принимает строку в качестве аргумента, а затем выполнить проверку вручную.

namespace App\Http\Middleware;
use Closure;

class HasPermission {
    public function handle($request, Closure $next, $permission)
    {
        if($request->user()->can('access', $permission)) {
           return $next($request);
        }

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

Затем зарегистрируйте новое промежуточное программное обеспечение в файле ядра

'hasPermission' => \App\Http\Middleware\HasPermission::class

Затем вы можете использовать новое промежуточное программное обеспечение вместо промежуточного программного обеспечения can в вашем маршруте.

Route::group([ 'prefix' => 'users', 'middleware' => 'hasPermission:edit_users' ], function() {});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...