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

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

Фронтенд

Роли настраиваются в файле /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'    : 'Уникальный доступ'
}

Бэкенд

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

$checker_checks = [
    'auth' => '',
    'role' => [
        'page'   => 'example',
        'access' => 'my-access',
    ],
];
$checker_result = $this->dic['checker']->run($checker_checks);
if (is_array($checker_result) && count($checker_result) == 0) {
    // Проверка успешно пройдена
} else {
    // Проверка провалилась
}

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

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

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

namespace Lemurro\Api\App\Checker;

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

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

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

$checker_checks = [
    'auth'   => $this->dic['session_id'],
    'simple' => [
        'class'   => 'Simple',
        'auth_id' => 'atomcms@ya.ru',
    ],
];
$checker_result = $this->dic['checker']->run($checker_checks);
if (is_array($checker_result) && count($checker_result) == 0) {
    // Проверка успешно пройдена
    // $this->response->setData($result);
} else {
    // При проверке возникли ошибки, вернём их
    $this->response->setData($checker_result);
}

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