> For the complete documentation index, see [llms.txt](https://delphinpro.gitbook.io/voyager-ru/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://delphinpro.gitbook.io/voyager-ru/core-concepts/roles-and-permissions.md).

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

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

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

![](/files/-ME4ulNH8DAD8Se5eBrD)

Новое в версии 1.0. Мы изменили систему авторизации Voyager на [подробнее в соответствии с Laravel](https://laravel.com/docs/authorization#authorizing-actions-using-policies)! Это означает, что вы можете проверять разрешения следующими способами:

```php
// 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`.

{% hint style="info" %}
**Уведомление**\
Если пункт меню связан с любым типом BREAD, то он будет проверять разрешение `browse`, например, для пункта меню `Posts` BREAD, он будет проверять разрешение `browse_posts`. Если у пользователя нет требуемого разрешения, то этот пункт меню будет скрыт.
{% endhint %}

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

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

Это работает, только если ваш 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](https://laravel.com/docs/authorization#gates)

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

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

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

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

```php
  /**
   * 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`, для этого мы можем использовать следующий синтаксис:

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

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

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

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