Яндекс.Метрика
qr-код - Как-то так стрелка - Как-то так
Ведущий экономист + ... пиктограмма - Как-то Так THIS     Экономическая грамотность и web-решения
Всё по теме: что, как и почему. Актуальные вещи - своими словами.
Повышайте своё качество WITH ME - СПЭМ !
Если тебе не нравится то, что ты получаешь, измени то, что ты даешь. © Карлос Кастанеда     KAKTOTAK.BY - услуги по экономическому проектированию и web-разработке (php/js - telegram, WordPress, Laravel, Vue, SEO)    Кооперация - на постоянной основе    Будь в теме   -    ПОДПИШИСЬ      Мои заметки - ЭКОНОМИКА +  и  Справочник WEB-разработчика | php+js+seo   в Telegram   telegram  

Gates в Laravel - распределение ролей и прав доступа к функциям проекта: принцип работы механизма

Gates в Laravel - распределение ролей и прав доступа к функциям проекта: принцип работы механизма

В Laravel есть такая классная фича, как Фасад Gate, позволяющая на уровне любого проекта, созданного на Laravel, задавать определённые правила в соответствии с которыми пользователь может получать права доступа к тому либо иному его функционалу, страницам, блокам.

Рассмотрим возможности Gates в нашем проекте, построенном на экосистеме Laravel Breez и включающем в себя сборку Vue + Inertiajs по умолчанию.

Сама по себе система Laravel Breez дает готовый вариант из коробки, своего рода скелет для построения своего проекта, где уже имеется система регистрации и авторизации, что очень здорово для быстрого старта в development своей CRM системы, тем боле совместно с Vue и Inertiajs

Gate - это ларавеловкий фасад (сервис), отвечающий за проксирование вызовов на Illuminate/Auth/Access/Gate.php через который и реализуется сам механизм определения прав доступа к тому либо иному функционалу создаваемого проекта.

Т.е., если по простому, то мы где-то и как-то задаем в фреймворке условие истинности для определенных/конкретных пользователей. После чего Laravel всегда будет проверять на возможность доступа им к чему-то в нашем проекте.  

Как это работает на простом примере.

Мы установили проект Laravel Breez + Vue + Inetiajs.

Определим наше правило доступа для авторизированных пользователей к определённым страницам нашего проекта.

Допустим, разрешим всем зарегистрированным юзерам с уровнем active = 1. В таблице users нашей базы данных мы создали путём миграции такое поле active.

Gates в Laravel - распределение прав доступа на примере - 2

Прописываем правило для данного Gate 'main-admin' в методе boot () провайдера

 app/Providers/AuthServiceProvider.php

Gates в Laravel - распределение прав доступа на примере - 1

main-admin – это наименование может быть любым (задаётся разработчиком).

В методе define мы определи значение для поля active модели User(её таблицы) значение 1 при котором Gate 'main-admin' будет определять истинность для данного условия (boolean тип).

Определим, к примеру, что пункты меню в хедере всех страницы для зарегистрированных пользователей будут доступны только тем, у кого active = 1. Пусть это будут вкладки навигации Клиенты и Опции. А для клиентов с уровнем active = 0, доступна только вкладка Кабинет пользователя.

Все запросы для рендера всех наших страниц проекта будут проходить через контроллер UserListController.php (соответствующие маршруты/роуты заданы в web.php)

Файловая структура проекта полностью реализована на компонентах Vue с использованием фасада Inertia.

Сейчас, до реализации прав доступа с различным уровнем active все страницы проекта доступны для всех пользователей.

Gates в Laravel - распределение прав доступа на примере - 3

В основном контроллере (UserListController.php) отвечающем за вывод всех страниц нашего проекта в конструкторе задаем функцию проверки истинности пользователя для всех методов (его функций).

Gates в Laravel - распределение прав доступа на примере - 10

Т.е., если условия Gate соблюдается (если пользователь c active = 1),то в конструкторе данного контролёра переопределяем значение переменной $rights с false на true и передаем её в компонент Vue, который будет выведен при отработке соответствующего метода (маршрута).

Все данные компоненты являются дочерними, родитель которых AuthenticatedLayout.vue есть ничто иное как обертка для них, в которой содержится необходимая нам навигация.

Gates в Laravel - распределение прав доступа на примере - 4

Например, метод index() контролера UserListController.php рендерит компонент Main.vue, который является дочерним для AuthenticatedLayout.vue. По такому принципу отображаются и другие дочерние компоненты для соответствующего маршрута (метода контролера).

Gates в Laravel - распределение прав доступа на примере - 11

Для того чтобы проверить по условию отображать соответствующий пункт меню, передача переменной $rights должна быть принята на стороне родительского компонента (обертки – вышестоящего компонента (AuthenticatedLayout.vue)) в виде props. Поэтому изначально передадим данному компоненту (AuthenticatedLayout.vue) эту переменную.

Gates в Laravel - распределение прав доступа на примере - 5_1

После чего укажем условия отображения пунктов меню:

Gates в Laravel - распределение прав доступа на примере - 5_2

Т.е., если значение получаемой переменной в props является истина (true) отображаем пункт меню, и наоборот.

Родительскому компоненту (AuthenticatedLayout.vue), в который вложены все дочерние компоненты и за вывод которых отвечает непосредственно сам контролер, предадим переменную $rights, которая в последующем и будет выведена на его стороне через props.  

Gates в Laravel - распределение прав доступа на примере - 5

Теперь проверим, как отображается навигация наших страниц.

Gates в Laravel - распределение прав доступа на примере - 6

Gates в Laravel - распределение прав доступа на примере - 7

Как видим, для пользователя с active = 1, отображается пункты меню Клиенты и Опции и соответствующие им страницы.

Теперь поменяем значение active на 0, в таблице users нашей базы данных.

Gates в Laravel - распределение прав доступа на примере - 8

И проверим, что отобразиться на странице сейчас.

Gates в Laravel - распределение прав доступа на примере - 9

Как видим, имеем только вкладку Кабинет пользователя.

Поняв суть и принцип работы с Gate можно разносторонне подходить к решению многих задач при разработке любого приложения на базе Laravel.

автор - Михаленко Р.
M R. Автор - kaktotak.by Специализация: финансово-экономическое проектирование - моделирование бизнеса, инвестиционных проектов реального сектора, анализ и оценка эффективности, оптимизация системы управленческих решений.

Широкий спектр web-компетенций для решения задач бизнеса.

Подписывайтесь на мой телеграмм канал - Мои заметки - ЭКОНОМИКА +
Там я ничего не втюхиваю и не навязываю. Просто делюсь полезной информацией по экономической грамотности. Повышайте своё качество вместе со мной: что, как и почему в экономике на простом языке. Понятия, алгоритмы, процессы, микро- и макроаспекты и многое другое. Может, будет интересно !

А так же - Справочник WEB-разработчика | php+js+seo
Заметки и нативные решения простых локальных задач на PHP, JS. Кое-что про Laravel, WordPress, Vue и SEO.

  Персональная помощь в экономическом проектировании и веб-разработке:

  • Финансово-экономическое моделирование, анализ, учёт, бизнес-планирование
  • Комплексная web-разработка/поддержка проекта в сети (php/js, seo – Laravel, WordPress, Vue, telegram, администрирование, контент, реклама в Яндекс Директ

  telegram или форма обратной связи

Administrator
760

Конвертер валют
RUB RUB-icon
USD USD-icon
EUR EUR-icon
CNY CNY-icon
BYN BYN-icon
UAH UAH-icon
KZT KZT-icon
SHORT - о чём речь
ЭКОНОМИЧЕСКАЯ ГРАМОТНОСТЬ
Хочу Всё Знать. Полезные Советы