Онлайн-руководство разработчика NetCat
Модуль «Поиск по сайту» 12.2.1Начало работы с модулем 12.2.2Язык запросов 12.2.3Способы хранения индекса 12.2.4Интерфейс модуля в панели управления сайтом 12.2.5Области индексирования 12.2.6Области HTML-страниц 12.2.7Области поиска на сайте 12.2.8Индексирование по расписанию, запуск индексирования в фоновом режиме 12.2.9Правила индексирования 12.2.10Постановка задачи переиндексирования в очередь 12.2.11Интеграция модуля в макеты дизайна сайта 12.2.12Простая форма поиска 12.2.13Расширенная форма поиска 12.2.14Вывод результатов поиска 12.2.15Стилизация списка подсказок 12.2.16Расширенные настройки 12.2.17Разработка расширений модуля 12.2.18Обзор архитектуры модуля 12.2.19Обработчики документов различных типов 12.2.20Текстовые фильтры 12.2.21Анализаторы текста 12.2.22Корректировщики запросов 12.2.23Подключение других поисковых систем 12.2.24Решение проблем с поиском 12.2.25Решение проблем с индексированием 12.2.26Справочник API

Класс для работы с правами пользователей

Доступность: везде

Класс предназначен для проверки прав  пользователя.

Константы

Существует несколько констант, которые непосредственно не относятся к классу, но тесно с ним связаны. Константы обозначают возможности. В таблице приведён список этих констант.

Константа Значение Право
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>" : "")?>

Методы для проверки прав доступа к модулям описаны в разделе «Права на модули».

Описание проекта