Простое право доступа

На основе конфига

Фронтенд

Роли настраиваются в файле /src/js/0-app/100-config.js в части client-metronic в блоке userRoles

Список доступных констант

  • list - Список ролей с правами доступа
  • guideAccess - Справочник названий прав доступа

Добавим новую роль example, с уникальным правом доступа my-access

// Список ролей с правами доступа
list: [
    {
        name  : 'example',
        title : 'Example',
        access: [
            'read',
            'create-update',
            'delete',
            'my-access'
        ]
    }
],

// Справочник названий прав доступа
guideAccess: {
    'read'         : 'Просмотр',
    'create-update': 'Добавление и изменение',
    'delete'       : 'Удаление',
    'my-access'    : 'Уникальный доступ'
}

Бэкенд

Теперь мы можем использовать проверку на наше право доступа

$this->checker->run([
    'auth' => '',
    'role' => [
        'page'   => 'example',
        'access' => 'my-access',
    ],
]);

// Проверка успешно пройдена

Или мы можем сами отловить исключение

try {
    $this->checker->run([
        'role' => [
            'page'   => 'example',
            'access' => 'my-access',
        ],
    ]);

    // Проверка успешно пройдена
} catch (ResponseException $e) {
    LogException::write($this->log, $e);

    // Проверка провалилась
}

Своя уникальная проверка

Для создания собственной проверки необходимо создать класс в каталоге серверной части /app/Checker

<?php
/**
 * Проверяем что это определенный пользователь
 *
 * @author  Дмитрий Щербаков <atomcms@ya.ru>
 *
 * @version 13.04.2018
 */

namespace Lemurro\Api\App\Checker;

use Lemurro\Api\Core\Abstracts\Action;
use Lemurro\Api\Core\Helpers\Response;

/**
 * @package Lemurro\Api\App\Checker
 */
class Simple extends Action
{
    /**
     * @author  Дмитрий Щербаков <atomcms@ya.ru>
     *
     * @version 13.04.2018
     */
    public function run(array $data): array
    {
        if ($this->dic['user']['auth_id'] == $data['auth_id']) {
            return [];
        } else {
            return Response::error403('Доступ ограничен', true);
        }
    }
}

Для использования класса доработаем список правил:

$this->checker->run([
    'auth'   => '',
    'simple' => [
        'class'   => 'Simple',
        'auth_id' => 'atomcms@ya.ru',
    ],
]);

// Проверка успешно пройдена
$this->response->setData($result);

return $this->response;
  1. simple - Имя вашей проверки может быть любым, оно не используется и носит справочный характер.
  2. class - Обязательное поле, указывает название вашего класса в каталоге серверной части /app/Checker
  3. auth_id - Также могут быть любые необязательные поля, которые будут переданы в ваш класс. В данном примере мы передаем auth_id одного из пользователей, чтобы удостовериться что мы находимся под нужным на пользователем.