Как управлять ролями и правами Laravel 5 и VUE.JS?

Доброго времени суток!
В планах сделать некий новостной сайт с возможностью пользователям добавлять, редактировать и т.п. (что-то типо CMS). Laravel 5.6 - в качестве backend, а Vue.JS - frontend.
Соответственно, хотелось бы разделить пользователей на роли - кому-то можно, а кому-то нельзя что-либо делать. Если с Laravel более-менее понятно, так с vuejs всё плохо. Хотелось бы использовать общие данные, но как лучше реализовать без понятия.
Собственно вопрос: Есть какой-либо пакет/модуль для совмещения всего этого в одну систему? Если есть урок по этому поводу, то буду очень рад если вы этим уроком поделитесь!)
PS: Сейчас понравилась и использую эту библиотеку - Bouncer (Для Laravel 5).
Заранее спасибо.
  • Вопрос задан
  • 3546 просмотров
Решения вопроса 2
Alex_Wells
@Alex_Wells
PHP/Kotlin
Реализуется легко:

на беке юзаете баунсер + $this->authorize/Gate::allows и проверяете нужные права, вне зависимости от фронта.
на фронт с бека передаете берете массив пермишенов (абилитис в баунсере), в том же месте, где передаете юзера (не важно, отдельным запросом или сразу при загрузке страницы). Пишите во vuex'е нужные геттеры, как пример из моего проекта:

export const can = (state) => (perm) => this.loggedIn(state) && state.authUser.abilities.includes(perm);
export const canAny = (state) => (perms) => perms.some(x => this.can(state)(x));


И юзаете директивы где нужно, предварительно импортнув нужные геттеры:

v-if="can('chat.mute')"

PS: не стоит писать свои директивы "v-can", ибо:
1) они не информативны (непонятно, что они делают, если прав нет)
2) прийдется написать с десяток таких, на все случаи жизни, типа "can-show", "can-if" и прочая лабудень.

PS2: про "переход по страницам" и любые запросы на бек - ларавель сам кинет forbidden 403, проверяете интерцептором в axios'е на этот статус и кидаете на страницу с ошибкой/показываете окошко/нотификацию/птичку/кошку.
Ответ написан
Комментировать
@imhuman
Все, что хранится на фронте, может быть изменено, это не секрет, поэтому использовать разрешения можно только на уровне показать/скрыть кнопку. Основной контроль должен быть только на бекенде. Поэтому массив разрешений можно загружать вместе с успешной авторизацией, а прятать его смысла нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zvermafia
@zvermafia
WebDev
Мне вот этот вариант понравился (но тока я еще не опробовал): Implementing Laravel’s Authorization on the Front-End
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы