Доступность: везде
Класс предназначен для проверки прав пользователя.
Существует несколько констант, которые непосредственно не относятся к классу, но тесно с ним связаны. Константы обозначают возможности. В таблице приведён список этих констант.
Константа | Значение | Право |
---|---|---|
MASK_READ | 1 | Просмотр |
MASK_ADD | 2 | Добавление объектов |
MASK_EDIT | 4 | Изменение своих объектов |
MASK_SUBSCRIBE | 8 | Подписка |
MASK_MODERATE | 16 | Модерирование |
MASK_ADMIN | 32 | Администрирование |
MASK_COMMENT | 64 | Комментирование |
MASK_CHECKED | 128 | Включение/выключение своих объектов |
MASK_DELETE | 256 | Удаление своих объектов |
Константы можно группировать через побитовые операции, например & (битовое «И» ) или | (битовое «ИЛИ»).
Например:
(MASK_ADD | MASK_EDIT ) обозначает возможность добавления объектов или редактирования своих.
(MASK_EDIT & MASK_DELETE) обозначает возможность редактирования и удаления своих объектов.
Примеры непосредственного использования констант будут приведены ниже в описаниях методов.
В глобальной области видимости доступен объект этого класса с именем $perm, при условии, что пользователь авторизирован. Если пользователь неавторизирован, то объект не существует. Объект содержит права текущего авторизированного пользователя.
Перед использованием этого объекта нужно убедиться, что он существует.
Проверить это можно, можно с помощью переменной $AUTH_USER_ID (который содержит номер текущего пользователя, либо 0, если пользователь неавторизирован), либо с помощью функции php is_object ().
Пример использования:
Вызвать некий метод класса.
if ( $AUTH_USER_ID) { $perm->метод(); }
или
<?=( is_object($perm) && $perm->метод() ? "A" : "Б" )?>
Класс позволяет получить права не только текущего пользователя, но и любого другого пользователя, а так же группы.
Для этого в конструктор нужно передать номер пользователя или группы. Номер пользователя передается первым параметром, номер группы — вторым. Второй параметр необязателен.
Пример использования:
Создать объект прав для пользователя с номером 5:
$perm_user_5 = new Permission( 5 );
Создать объект прав для группы с номером 2:
$perm_group = new Permission (0, 2);
Ниже приведён список методов, которые можно использовать.
bool isDirector()
Метод проверяет, есть ли у пользователя ( группы ) тип прав «Директор». Если пользователь — директор, то метод вернет true, иначе — false.
Пример использования:
Вывести в макете особое приветствие для пользователей-директоров.
<?=opt( is_object($perm) && $perm->isDirector(), "Вы являетесь директором на этом сайте.")?>
bool isSupervisor()
Метод проверяет, обладает ли пользователь правом «Супервизор» или выше. Если пользователь — директор или супервизор, то метод вернет true, иначе — false.
Пример использования:
Вывести в макете ссылку для входа в систему администрирования для супервизора и директора.
<?=opt( is_object($perm) && $perm->isSupervisor(), "<a href='/netcat/admin/'>Войти в панель администратора</a>")?>
bool isCatalogue ( int $CatalogueID, int $mask)
Метод проверяет, если у пользователя право, заданной маской $mask, на сайт с номером $CatalogueID.
Параметры | Описание |
---|---|
$CatalogueID | идентификатор сайта |
$mask | право, существование которого проверяется |
Метод возвращает true, если пользователь является директором, супервизором или редактором с требуемым правом.
$mask легче всего записывать через константы, приведённые выше.
Пример использования:
Вывести сообщение в макете, если пользователь может добавлять и изменять свои объекты на сайте.
<?=opt( is_object($perm) && $perm->isCatalogue($catalogue, MASK_ADD & MASK_EDIT), "Вы можете добавлять и изменять сообщения")?>
Данный текст пользователь увидит, если он:
bool isSubdivision ( int $SubdivisionID, int $mask)
Метод проверяет, если у пользователя право, заданной маской $mask, на раздел с номером $SubdivisionID. Причем право пользователю может быть назначено на непосредственно не сам раздел, а на родительский раздел или на сайт, где находится раздел.
Параметры | Описание |
---|---|
$SubdivisionID | идентификатор раздела |
$mask | право, существование которого проверяется |
Метод возвращает true, если пользователь является директором, супервизором или редактором с требуемым правом.
$mask можно записывать как и в случае с isCatalogue
Пример использования:
для модератора раздела при выводе объектов показать IP адрес пользователя, добавившего объект.
В системных настройках компонента вводим переменню $is_moderate, которая принимает значение true, если пользователь — модертор раздела и false — иначе.
$is_moderate = is_object($perm) && $perm->isSubdivision($sub, MASK_MODERATE);
В объекте в списке выводим, если нужно, IP:
<?=opt( $is_moderate, "IP: ".$f_IP)?>
IP пользователь увидит, если он:
bool isSubClass($SubClassID, $mask)
Метод проверяет, если у пользователя право, заданной маской $mask, на компонент в разделе с номером $SubClassID.
Параметры | Описание |
---|---|
$SubClassID | идентификатор компонента в разделе |
$mask | право, существование которого проверяется |
Метод возвращает true, если пользователь является директором, супервизором или редактором с требуемым правом.
$mask можно записывать, как и в случае с isCatalogue. Этот метод является очень важным в классе Permission, поскольку проверяет права непосредственно на компонент в разделе.
Пример использования:
1. Узнать, является ли пользователь администратором компонента в разделе с номером 7:
( is_object($perm) && $perm->isSubClass(7, MASK_ADMIN) )
2. Вывести в префиксе компонента ссылку на добавление объекта, если пользователь действительно имеет право на добавление.
Здесь возможны три случая права доступа:
Тип доступа содержится в элементе массива $cc_env по ключу Write_Access_ID.
В первом случае добавление возможно всегда.
Во втором случае, только если существует переменная AUTH_USER_ID.
В третьему случае, если существует объект $perm и isSubClass выдает true.
В префиксе можно написать:
<?=( ($cc_env['Write_Access_ID'] == 1 || ($cc_env['Write_Access_ID'] == 2 && $AUTH_USER_ID) || ( $cc_env['Write_Access_ID'] == 3 && is_object($perm) && $perm->isSubClass($cc, MASK_ADD | MASK_MODERATE) ) )? "<a href='$addLink'>Добавить объект</a>" : "")?>
Методы для проверки прав доступа к модулям описаны в разделе «Права на модули».