Роли и разрешения

Voyager поставляется с ролями и разрешениями из коробки. Каждый Пользователь имеет Роль, который имеет набор из Разрешений.

Внутри панели управлении можно выбрать Добавить, Редактировать или удалить текущие роли. Кроме того, при нажатии на кнопку редактирования определенной роли вы можете указать права BREAD.

Новое в версии 1.0. Мы изменили систему авторизации Voyager на подробнее в соответствии с Laravel! Это означает, что вы можете проверять разрешения следующими способами:

// via user object
$canViewPost = $user->can('read', $post);
$canViewPost = Auth::user()->can('read', $post);

// via controller
$canViewPost = $this->authorize('read', $post);

Вне поля есть некоторые разрешения, которые вы можете использовать по умолчанию:

  • browse_admin: Может ли пользователь просматривать админ-панель Voyager или нет.

  • browse_database: Может ли пользователь просматривать раздел базы данных в меню Voyager или нет.

  • browse_bread: Может ли пользователь просматривать раздел меню Voyager BREAD или нет.

  • browse_media: Может ли Пользователь просматривать медиа-раздел Voyager или нет.

  • browse_menu: Может ли пользователь просматривать раздел меню Voyager или нет.

  • browse_settings: Может ли пользователь просматривать раздел настроек Voyager или нет.

  • read_settings: Может ли пользователь просматривать или видеть определенный параметр.

  • edit_settings: Может ли пользователь редактировать тот или иной параметр или нет.

  • add_settings: Может ли пользователь добавить новую настройку или нет.

  • delete_settings: Может ли пользователь удалить определенный параметр или нет.

Дополнительно вы можете Генерировать права \(Generate permissions\) для каждого типа BREAD, который вы создаете. Это создаст права на просмотр, чтение, редактирование, добавление и удаление.

В качестве примера, допустим, мы создаем новый тип BREAD из таблицы products. Если мы выберем опцию Generate permissions для нашей таблицы products, то ключами доступа будут browse_products, read_products, edit_products, add_products и delete_products.

Уведомление Если пункт меню связан с любым типом BREAD, то он будет проверять разрешение browse, например, для пункта меню Posts BREAD, он будет проверять разрешение browse_posts. Если у пользователя нет требуемого разрешения, то этот пункт меню будет скрыт.

Создание разрешений для пользовательской страницы

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

Это работает, только если ваш slug идет сразу после /admin/. Таким образом, для пользовательской страницы формы /admin/sub/foo пункт меню не будет скрыт из меню.

Создание разрешения

Сначала создайте разрешение в таблице разрешений (можно использовать BREAD, например, имя модели TCG\Voyager\Models\Permission). Столбец table_name должен быть равен null. Колонка key должна иметь форму browse_slug, где slug должен быть заменен фактическим slug Вашей пользовательской страницы. Например, чтобы ограничить доступ к вашей пользовательской странице с помощью url /admin/create_bill, вы можете создать разрешение browse_create_bill.

Установка роли

Проверьте разрешение для каждой роли, которую вы хотите предоставить доступ к сайту на admin/roles. В приведенном выше примере вы найдете новый флажок "Browse Create Bill". Если у пользователя нет требуемого разрешения, то пункт меню, ведущий на вашу пользовательскую страницу, будет скрыт.

Кастомизация контроллер

Вы можете создать свои собственный gate

Gate::define(`browse_create_bill`, function ($user) {
    return $user->hasPermission(`browse_create_bill`);
});

Использовать authorize в вашем контроллере:

public function index()
{
  $this->authorize('browse_create_bill');
  //..

Если вы это сделаете, обязательно добавьте в контроллер пользовательский guard:

  /**
   * Get the guard to be used during authentication.
   *
   * @return \Illuminate\Contracts\Auth\StatefulGuard
   */
  protected function guard()
  {
      return Auth::guard(app('VoyagerGuard'));
  }

Использование разрешений в файлах blade-шаблонов

Вы также можете проверить права доступа, используя синтаксис blade. Допустим, Вы хотите проверить, может ли пользователь browse_posts, для этого мы можем использовать следующий синтаксис:

@can('browse', $post)
    I can browse posts
@endcan

Или, возможно, вам нужно выполнить другое условие для получения разрешения. Это достаточно просто:

@can('browse', $post)
    I can browse posts
@else
    I cannot browse posts
@endcan

Не может быть проще, правда ;).

Last updated