Добавление прав доступа через конструктор AWZ: Права доступа (ролевая модель) [awz.acl]

1. Устанавливаем модуль awz.admin

  • поддерживаются только модули содержащие в названии директории точку, например, awz.acl

2. Генерируем права доступа

2.1. Переходим в генератор прав доступа и выбираем директорию с нашим модулем (awz.acl)

Настройки -> AWZ: Конструктор списков -> Генератор прав доступа

2.2. Добавляем разделы прав доступа

Например, Кабинет дилера код: LK

2.3. Добавляем правила прав доступа

Параметр Пример Описание
Константа DILER_LK_VIEW Большие латинские буквы
Значение 5 Любое уникальное в рамках модуля int
Правило lkview Название класса с логикой проверки
будет сгенерирован в \lib\access\custom\rules
Название настройки Просмотр главной кабинета Значение для языковой переменной

2.4 Создаем роль и сохраняем права

3. проверка прав доступа

Добавление дополнительной логики в класс доступа

/bitrix/modules/awz.acl/lib/access/custom/rules/lkview.php

Стандартный класс, сгенерированный модулем уже проверяет по первому добавленному (пункт 2.3)

class Lkview extends \Bitrix\Main\Access\Rule\AbstractRule
{
    public function execute(AccessibleItem $item = null, $params = null): bool
    {
        if ($this->user->isAdmin() && !Helper::ADMIN_DECLINE)
        {
            return true;
        }
        if ($this->user->getPermission(PermissionDictionary::VIEW_EUR))
        {
            return true;
        }
        return false;
    }
}

Добавим проверку по ид элемента

class Viewcurrency extends \Bitrix\Main\Access\Rule\AbstractRule
{
    public function execute(AccessibleItem $item = null, $params = null): bool
    {
        if ($this->user->isAdmin() && !Helper::ADMIN_DECLINE)
            return true;
        if ($this->user->getPermission(PermissionDictionary::VIEW_ALL))
            return true;
        if($item == 1 && $params == 'test') return true;
        return false;
    }
}
use Awz\Acl\Access\AccessController;
use Awz\Acl\Access\Custom\ActionDictionary;
if(AccessController::can(0,ActionDictionary::ACTION_DILER_LK_VIEW, 1, "test"){
//проверка пройдена
}
if(!AccessController::can(0,ActionDictionary::ACTION_DILER_LK_VIEW, 1, "неизвестный параметр"){
//проверка не пройдена
}

AccessController::can

Параметр Описание
userId Ид пользователя, если не задан то текущий
action Константа прав доступа, например ActionDictionary::ACTION_DILER_LK_VIEW
itemId null или ид элемента для проверки прав
params null или дополнительные параметры для проверки
use Awz\Acl\Access\AccessController;
use Awz\Acl\Access\Custom\ActionDictionary;
if(\Bitrix\Main\Loader::includeModule('awz.currency')){

    $res = \Awz\Currency\CursTable::getCurs(date('d.m.Y'));
    echo 'count all: '.count($res)."\n";
    foreach($res as $code=>$value){
        if(AccessController::can(0,ActionDictionary::ACTION_VIEW_ALL, false, $code)){
            echo $code.' - '.$value['AMOUNT']."\n";
        }
    }

}
### Результат выполнения команды
### count all: 4
### USD - 99.4215

AccessController::isViewSettings

Проверяет есть ли доступ к редактированию настроек модуля

use Bitrix\Main\Loader;
use Awz\Acl\Access\AccessController;
$module_id = "awz.acl";
Loader::includeModule($module_id);
if(!AccessController::isViewSettings())
    $APPLICATION->AuthForm(Loc::getMessage("ACCESS_DENIED"));

AccessController::isViewRight

Проверяет есть ли доступ к редактированию прав доступа к модулю

Обсуждение в Telegram

Для улучшения работы сайта используются cookie.
Подробнее об этом в Политике cookie.
Принять Настроить