По умолчанию модули доступны только пользователям с правами директора или супервизора.
Пользователю или группе можно присвоить права на доступ ко всему модулю.
Если существует необходимость предоставить доступ к отдельным частям модуля, необходимо создать во всех имеющихся языковых файлах модуля (ru_utf8.lang.php
, ru_cp1251.lang.php
, en.lang.php
) константы с названием права доступа вида NC_PERM_MODULE_КЛЮЧЕВОЕСЛОВОМОДУЛЯ_ОБЪЕКТ_ДЕЙСТВИЕ
, где
КЛЮЧЕВОЕСЛОВОМОДУЛЯ
— ключевое слово вашего модуля (например, MYMODULE
для модуля в папке mymodule
, MY_MODULE
для модуля в папке my_module
);ОБЪЕКТ
— сущность, к которому предоставляется доступ (например, ORDER
для заказа);ДЕЙСТВИЕ
— выполняемое над сущностью действие (например, VIEW
для просмотра);Например:
<?php const NC_PERM_MODULE_MYMODULE_ORDER_VIEW = 'просмотр заказов'; // ... // остальные языковые константы
Кроме добавленных через такие константы прав у модуля всегда будет право «полный доступ», которое обозначает возможность использования всех перечисленных в константах прав. Описание такого права можно изменить, задав константу NC_PERM_MODULE_КЛЮЧЕВОЕСЛОВОМОДУЛЯ_ALL
:
// замена подписи «полный доступ» на «все действия (кроме изменения настроек)» для модуля mymodule: const NC_PERM_MODULE_MYMODULE_ALL = 'все действия (кроме изменения настроек)';
Обратите внимание, что проверку прав в модуле всегда необходимо выполнять явным образом. Для этого используйте класс для работы с правами пользователей (Permission).
Метод Permission::hasAnyModulePermission($module_keyword, $site_id = null)
проверяет наличие хотя бы одного права на доступ к модулю на указанном сайте (или, если $site_id
не указан, то на любом из имеющихся сайтов). Например:
<?php /** @var Permission $perm */ global $perm; if (!$perm->hasAnyModulePermission('mymodule') { die('Нет прав на доступ к модулю.'); }
Метод Permission::hasModulePermission($module_keyword, $permission_type, $site_id = null)
проверяет наличие конкретного права для указанного модуля. В качестве проверяемого права $permission_type
передаётся строка, равная названиям объекта и действия в соответствующей константе в нижнем регистре. Например:
<?php /** @var Permission $perm */ global $perm; if (!$perm->hasModulePermission('mymodule', 'order_view') { // соответствующая константа — NC_PERM_MODULE_MYMODULE_ORDER_VIEW die('Нет прав на просмотр заказов.'); }
Доступ к модулям может быть также ограничен по сайтам. Для того, чтобы включить разграничение прав доступа к модулю для отдельных сайтов, необходимо задать в поле PerSitePermissions
в таблице Module
в строке для модуля значение 1
(вместо значения по умолчанию 0
).