Простое право доступа
На основе конфига
Фронтенд
Роли настраиваются в файле /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();
-
simple
- Имя вашей проверки может быть любым, оно не используется и носит справочный характер. -
class
- Обязательное поле, указывает название вашего класса в каталоге серверной части/app/Checker
-
auth_id
- Также могут быть любые необязательные поля, которые будут переданы в ваш класс. В данном примере мы передаемauth_id
одного из пользователей, чтобы удостовериться что мы находимся под нужным на пользователем.