Сервисы Optimizer 2.5
Введение
В рамках продукта Optimizer реализованы некоторые наиболее используемые на web-сайтах функциональные модули, называемые сервисами. Сервис в Optimizer представляет собой набор шаблонов, администраторских интерфейсов, команд, данных и процедур, реализующих какую либо функциональную задачу.
В системе присутствуют следующие готовые сервисы:
- Регистрация / авторизация
- форум
- подписка
- faq
- система голосований
- система пользовательских документов
Индивидуальные параметры сервисов могут быть настроены с помощью соответствующих администраторских интерфейсов, а значительные изменения внешнего вида и интеграция сервисов с разделами сайта реализуются путем внесения изменений в открытые шаблоны сервисов.
Регистрация / Авторизация
Сервис регистрации предоставляет возможность заносить в базу данных системы персональную информацию пользователей сайта и ограничивать/индивидуализировать доступ групп пользователей к произвольным объектам и сервисам сайта. Авторизованные пользователи, в зависимости от группы, которой они принадлежат, могут иметь разный доступ к системе и формы работы с ней.
Регистрация пользователей в системе возможна двумя способами:
пользователь самостоятельно выполняет действия по своей регистрации в системе на соответствующей странице сайта. администратор системы вручную заводит и активизирует нового пользователя.Процесс регистрации пользователя администратором системы состоит в создании нового объекта типа ‘Пользователь’, заполнении его персональной информации и привязки его к одной из существующих групп пользователей.
Далее будем рассматривать случай самостоятельной регистрации пользователя.
Система регистрации для пользователя системы
Для пользователя сайта система регистрации выглядит следующим образом:
Блок авторизации
Служит для авторизации зарегистрированного пользователя в системе, и может быть расположен на любой странице сайта.
Для неавторизованного пользователя содержит поля ввода логина и пароля, а также ссылки страницу регистрации и восстановления пароля.

после того, как пользователь авторизовался в системе, содержимое блока заменяется на персональную информацию пользователя и ссылки на завершение сеанса работы с системой и страницу изменения регистрационных данных

Страница регистрации нового пользователя
Служит для регистрации нового пользователя в системе. Содержит форму ввода регистрационной информации и пароля пользователя.

Состав информации, необходимой для регистрации пользователя, может настраиваться администратором системы в интерфейсе конфигуратора.
После ввода информации в форму, в зависимости от настроек регистрации, происходит либо регистрация и активация пользователя в системе, либо отправление на его e-mail почтового сообщения со ссылкой для завершения процесса регистрации.
Страница изменения персональных данных пользователя
Авторизованный пользователь может изменить на этой странице информацию, которую ввел ранее при регистрации.

Страница восстановления пароля
В случае, если пользователь забыл свой пароль, то он может его поменять с помощью страницы восстановления пароля.

После ввода своего e-mail на этой странице, в зависимости от настроек системы, пользователю будет предложено либо ответить на секретный вопрос, который он вводил при регистрации и затем поменять пароль на новый, либо новый, сгенерированный системой пароль, будет отправлен на e-mail пользователя.
Настройки регистрации
Настройки сервиса регистрации доступны в разделе “Сервисы” конфигурационного интерфейса (config/) и состоят из следующих страниц: Настройки, Вопросы, Почтовые шаблоны.

Рис. 1
На данной странице устанавливается тип регистрации и возможность указания при регистрации секретного вопроса пользователя.
Тип регистрации
Тип регистрации определяет схему регистрации пользователя.
Обычная схема – после того как пользователь ввел свои персональные данные на странице регистрации, на его почтовый ящик отправляется письмо, в котором содержится ссылка для завершения процедуры регистрации. Пользователь должен пройти по присланной ссылке для своей активации в системе.
Упрощенная схема – пользователь становится активным в системе сразу после заполнения персональных данных на странице регистрации.
Дилерская схема – пользователь заполняет свои данные на странице регистрации и они попадают в систему, но не активируются. Администратор сервера вручную активизирует пользователя в системе после проверки его данных.
Секретный вопрос
При включенной данной опции, пользователю при регистрации будет предложено ввести секретный вопрос и ответ на него, который будет использован для идентификации пользователя в случае, если он утерял свой пароль и хочет его заменить. Список предопределенных секретных вопросов можно задать на странице “Вопросы” этого же раздела.
Почтовые шаблоны
На этой странице можно задать параметры и тексты почтовых сообщений, отправляемых пользователю и администратору системы на разных этапах регистрации.
В случае регистрации нового пользователя непосредственно администратором системы, настройки сервиса регистрации не актуальны и не используются.
Пользователи
Основным объектом сервиса регистрации являются пользователи системы.
С точки зрения системы, пользователь – это активная единица системы, обладающая персональной информацией, принадлежащая одной из групп пользователей и способная совершать операции чтения, изменения и удаления других объектов системы.
Пользователи представляются в системе в виде объектов типа “Пользователь”. Этот тип документов является предопределенным в системе и содержит обязательный набор атрибутов, который может быть дополнен другими произвольными атрибутами.
Персональная информация зарегистрированных пользователей хранится в базе данных системы и доступна в разделе “Пользователи” администраторского интерфейса (рис.2).

Рис 2.
Атрибуты пользователя
Изначально заданные атрибуты пользователя следующие:
Название | Код атрибута | Описание |
Идентификатор пользователя | r_uid | Логин пользователя в системе |
Обладает правами конфигуратора | r_is_config | Бинарное св-во. Пользователи, у которых значение этого поля установлено в 1, обладают правами по администрированию и конфигурированию системы с помощью администраторских интерфейсов (cоздание новых типов документов, новых объектов системы, а также передача прав конфигуратора другим пользователям) |
Обладает правами администратора | r_is_admin | Бинарное св-во. Пользователи, у которых значение этого поля установлено в 1, обладают правом администрирования системы (создание новых объектов в системе) |
ФИО | c_name | Имя пользователя |
Активность | c_visible | Бинарное св-во. Признак активности пользователя. Устанавливается в 1 после активации пользователя. |
На первую страницу | c_fp | Бинарное св-во. Может использоваться по усмотрению разработчиков. |
Электронный адрес | r_email | E-mail пользователя |
Псевдоним | r_nickname | Nickname пользователя в системе. Может использоваться в форумах. |
Секретный вопрос для авторизации | r_question | Секретный вопрос пользователя для возможности восстановления пароля. |
Ответ на секретный вопрос | r_answer | Ответ на секретный вопрос пользователя. |
Пароль | r_pwd | Пароль пользователя для авторизации в системе. Хранится в БД в зашифрованном виде. |
К данному набору атрибутов с помощью конфигуратора ( Типы документов > Пользователи > Поля и связи) могут быть добавлены другие произвольные атрибуты.
Группы пользователей
Группы пользователей используются для разграничения прав пользователей в системе. Список групп задается в администраторском интерфейсе в разделе “Группы”.
Неавторизованного пользователя система рассматривает как пользователя принадлежащего группе ‘Все пользователи’.
После авторизации, пользователь принадлежит либо группе “Авторизованные пользователи”, и группе, или нескольким группам, в которые его определил администратор системы.
Работа с правами групп будет рассмотрена ниже в разделах “Разграничение прав доступа” и “Команды для работы с правами”.
Шаблоны регистрации
Сервис регистрации состоит из следующих шаблонов:
web\templates\mail\usr_reg_adminfo. htm
почтовое сообщение, отправляемое администратору системы, при регистрации нового пользователя. Текстовое содержание этого сообщения может определяться в интерфейсе конфигуратора в разделе “Сервисы > Сервис регистрации > Почтовые шаблоны”;
web\templates\mail\usr_reg_confirm. htm
почтовое сообщение, отправляемое пользователю в процессе регистрации и содержащее ссылку, для ее завершения;
web\templates\mail\usr_reg_password. htm
почтовое сообщение, высылаемое пользователю в процессе восстановления пароля и содержащее новый, сгенерированный системой, пароль;
web\templates\show\registration. htm
шаблон отображения системы регистрации;
web\templates\pub\reg_prop. htm
шаблон, содержащий форму регистрации нового пользователя / изменения персональной информации уже существующего пользователя. Непосредственно вывод полей формы с информацией о пользователе осуществляется с помощью подключения шаблона вывода web\templates\sub\client_prop. htm c параметром “pics” (тип объекта “пользователь”)
web\templates\pub\reg_auth. htm
шаблон, содержащий форму авторизации пользователя, блок восстановления пароля и ссылку на страницу регистрации;
Разграничение прав доступа
Система разграничения прав пользователей к объектам является неотъемлемой частью сервиса регистрации и выполняет функции контролирующего звена между пользователями системы и объектами системы.
Система разграничения прав обладает следующими возможностями:
- назначение прав доступа пользователей к типам документов
- назначение прав доступа к объектам системы (разделов каталога, документов)
Логика работы системы разграничения прав распространяется на всех пользователей системы и едина для клиентской (общедоступной) и администраторской частей системы. Т. е. зарегистрированные пользователи одной группы обладают одними правами как при просмотре страниц сайта, так и при работе с его администраторской частью.
Таким образом, система разграничения прав позволяет выделять посетителей сайта в различные группы и назначать на их группу отдельные права, а также дает возможность сопровождения сайта несколькими группами редакторов, обладающими разными правами доступа к разделам сайта.
Права доступа к типам объектов задаются в конфигураторском интерфейсе в разделе “Типы документов” на странице “Права”.

Рис.3
Права, установленные на тип документа автоматически наследуются всеми документами этого типа в системе. Если установить права на рубрику каталога в системе, то эти права унаследуют все, объекты, находящиеся в этой рубрике.
Права конкретного объекта, которые он унаследовал от прав своего типа или своей рубрики каталога, могут быть переопределены на любые другие, и будут действовать только при доступе к данному конкретному объекту. Переопределить права отдельного объекта можно в администраторском интерфейсе, на странице его прав.

Рис.4
Назначение прав на доступ к типу объектов используется для ограничения доступа пользователей к документам данного типа во всей системе.
Назначение прав на доступ к конкретному объекту (документу, разделу каталога) используется для ограничения доступа пользователей только к данному объекту.
Каждой группе пользователей могут быть назначены свои права доступа к типу (документу). Права представляют собой бинарную маску, представляющую собой комбинацию следующих позиций:
Создание – право на создание данной группой пользователей данного типа документов
Чтение списка объектов –право на чтение списка объектов, выводимых командой 
Чтение - право на чтение атрибутов данного объекта
Чтение собственных объектов – право на чтение объектов, созданных самим пользователем
Изменение – право на редактирование содержания объекта
Изменение собственных объектов – право на изменение объектов, созданных самим пользователем
Удаление – право на удаление объектов
Удаление собственных объектов – право на удаление объектов, созданных самим пользователем
Изменение прав – право на изменение прав объекта группой пользователей
Внимание!
В случае, если пользователь принадлежит нескольким группам, то при доступе к документам его права определяются объединением прав всех групп, в которые он входит.
Во всех стандартных шаблонах вывода, присутствующих в комплекте поставки Optimizer реализована проверка прав доступа.
Реализация разграничения прав в новых шаблонах разрабатываемого сайта может быть осуществлена разработчиками двумя способами:
- с помощью стандартных команд Optimizer, в логику которых заложена работа с правами
- непосредственным использованием логики этих прав в sql-запросах к объектам
Команды для работы с правами
При разработке пользовательских шаблонов, могут быть использованы следующие команды, работающие с правами объектов.
Доступ к документам
Для проверки доступа к отдельным документам используются команды:
<gp@mso@access_enabled>[rights]$$[ob_no]
…
[код шаблона]
…
</gp@mso@access_enabled>
где
[rights] – параметр в виде десятичного целого числа, обозначающий права доступа.
В случае, если пользователь обладает правами [rights] или его права включают в себя права [righths], то выполняется часть кода, заключенная между данными тегами.
$$ - разделитель между параметрами
[ob_no] – необязательный параметр, обозначающий идентификатор документа, к которому проверяется доступ. В случае отсутствия этого параметра, команда использует значение параметра ob_no, с которым была вызвана текущая страница.
<gp@mso@access_disabled>[rights]$$[ob_no]
…
[код шаблона]
…
</gp@mso@access_disabled>
Доступ к типам документов
Для проверки доступа к типам документов используются команды:
<gp@mso@access_enabled_class>[rights]$$[cl_code]
…
[код шаблона]
…
</gp@mso@access_enabled_class>
где
[cl_code] – необязательный параметр обозначающий идентификатор типа документов, к которому проверяется доступ. В случае отсутствия этого параметра, команда использует значение параметра cl_code, с которым была вызвана текущая страница
Параметр [rights] можно получить путем обычного сложения целых чисел, обозначающих следующие права:
1 | read | Чтение |
2 | read_list | Чтение списка объектов |
4 | create | Создание |
8 | update | Изменение |
16 | update_own | Изменение собственных объектов |
32 | delete | Удаление |
64 | delete_own | Удаление собственных объектов |
128 | change_rights | Изменение прав |
256 | read_own | Чтение собственных объектов |
Пример:
В шаблоне страницы новостей для дилеров компании выводить новости только для авторизованных пользователей из группы ‘Дилеры’.
Для этого:
В администраторском интерфейсе в свойствах раздела дилерских новостей выставляем права для группы ‘Дилеры’ на чтение и чтение списка объектов. У остальных групп (кроме администраторов) все права должны быть выключены; В шаблоне дилерских новостей вывод документов оборачиваем командой:<gp@mso@access_enabled>2
…
[вывод новостей]
…
</gp@mso@access_enabled>
<gp@mso@access_disabled>2
Данные новости доступны только для наших дилеров.
</gp@mso@access_disbled>
где 2 – код права на чтение списка объектов.
При обращении пользователя сайта к шаблону, команда <gp@mso@access_enabled>2 сравнит права его группы с параметром ‘2’ и в случае, если пользователь авторизован и принадлежит группе ‘Дилеров’, отработает код, содержащийся между соответствующими тегами (в нашем случае это вывод новостей).
В случае, если пользователь не авторизован или не принадлежит группе ‘Дилеры’, команда <gp@mso@access_disabled>2 выполнит свое содержимое (т. е. сообщение ‘Данные новости доступны только для наших дилеров’).
Кроме описанных команд, проверку прав пользователя на обращение к документам реализуют, также, и все стандартные команды и процедуры Optimizer, работающие со списком документов или их свойствами. Подробней описание команд Optimizer см. в разделе “Команды Optimizer”.


