По умолчанию модули доступны только пользователям с правами директора или супервизора.
Пользователю или группе можно присвоить права на доступ ко всему модулю.
Если существует необходимость предоставить доступ к отдельным частям модуля, необходимо создать во всех имеющихся языковых файлах модуля (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).