Как я могу использовать logi c в классе политики Laravel для защиты маршрута маршрутизатора vue? - PullRequest
0 голосов
/ 30 мая 2020

Мое приложение состоит из API, созданного с помощью Laravel, и интерфейсного SPA с использованием Vue. js и Vue Router.

Я написал класс политики в Laravel, в котором есть лог c, чтобы определить, может ли пользователь создать / прочитать / обновить / удалить ресурс. Страницы для выполнения этих действий: Vue Маршруты маршрутизатора и определены в моих маршрутах. js файл, следующий по обычной схеме URL:

GET  /tasks (all tasks)
GET  /tasks/:task (show task)
GET  /tasks/create (create task)
GET  /tasks/:task/edit (edit task)
...

Возьмем, к примеру, маршрут задачи редактирования: Я бы хотели бы использовать Vue средства навигации маршрутизатора для перенаправления пользователя, если у него нет разрешения на редактирование задачи. Этот logi c определен в моем классе политики API примерно так:

// App\Policies\TaskPolicy

public function update(User $user, Task $task)
{
    return $user->hasRole('foo') && ($task->owner === $user->id);
}

В моем Vue файле маршрутов маршрутизатора, как я могу использовать TaskPolicy logi c и проверить, пользователь может редактировать задачу, не дублируя ее в Vue. js?

1 Ответ

0 голосов
/ 30 мая 2020

Я рекомендую вызывать начальную конечную точку при первом запуске / загрузке Vue. JS. Эта конечная точка должна включать список разрешений, которые есть у пользователя. Эти разрешения должны определять, что пользователь может видеть на FE.

Что касается разрешений на такие вещи, как обновление, одно из разрешений может называться task.update, если оно присутствует в начальной конечной точке, тогда Vue. JS будет знать, что авторизованный пользователь может обновить задачу.

Кроме того, если пользователь по какой-либо причине вызывает конечную точку, ваше Laravel приложение, благодаря созданной вами политике, должно ответить кодом 403.

Пример плагина управления разрешениями: Spat ie Разрешение или вы можете создать свое собственное ... это зависит от сложности вашего программного обеспечения


ОБНОВЛЕНИЕ

Если вы перечисляете все задачи из конечной точки списка , если те, которые не принадлежат зарегистрированному пользователю, вы всегда можете добавить дополнительный атрибут к модели Task, который укажет, может ли вошедший пользователь обновить задачу. Этот атрибут может называться editable и будет логическим. Если editable является false, то Vue. JS знает, что не нужно отображать кнопку редактирования, и так далее.

...