Урок 10. Администрирование, аудит#

Цель данного урока познакомить слушателя с принципами администрирования и аудита.

Аудит#

Аудит предназначен для фиксации различных событий при работе пользователей в системе: вставка, изменение, удаление, выполнение операций, и т.д.

Аудит является сервисной возможностью и может быть включен для любого класса в системе.

Для изучения смотри:

Пользователь#

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

Для изучения смотри:

Администрируемый объект#

Администрируемый объект - это логически связанный для массовой раздачи прав набор привилегий. Административный объект генерируется по объектам системы и позволяет единым образом выдавать права на них.

Для изучения смотри:

Объектные привилегии#

Объектные привилегии позволяют раздавать права на бизнес логику.

Для изучения смотри:

Элементарная привилегия#

Элементарные привилегии используются для разграничения действий пользователя в пользовательском интерфейсе.

Для изучения смотри:

Роль#

Роль - административная единица для выдачи прав. В роле выдаются гранты на привилегии.

Для изучения смотри:

Профиль пользователя#

Профили пользователя используются для группировки ролей и более удобной раздачи их пользователю.

Для изучения смотри:

Практика#

Аудит#

  1. Включите аудит на документе Lbr_InAct и его позициях Lbr_InActDet

  2. Создайте структуру хранения аудита для класса Lbr_InAct

  3. Создайте новый документ

  4. Посмотрите аудит по новому документу.

Произвольная запись в аудит.#

  1. Включите аудит на справочнике Lbr_Publisher

  2. Доработайте операцию Обновить характеристики: если успешно введены санкции, то в аудит пишется запись «Санкции успешно введены». Для создания произвольной записи используйте метод ru.bitec.app.btk.class_.service.audit.Btk_AuditPkg#insertRow

Синхронизация исходного кода и данных администрирования#

  1. Обновить администрируемые объекты модуля lbr.
    Руководство администратора: Приложение администратор # Групповая настройка привилегий ролей

Создание роли доступа к приложению#

  1. Откройте список ролей.

  2. В дереве групп добавьте новую группу Роли библиотеки

  3. В новой созданной группе создайте роль Доступ к библиотеке

    • на закладке Приложения, доступные для роли выдайте права на приложение Управление библиотекой

Создание профиля#

  1. Откройте список профилей.

  2. В дереве групп добавьте новую группу Профили библиотеки

  3. В новой созданной группе создайте профиль Библиотека, только чтение

  4. Подключите к профилю роль Доступ к библиотеке

Создание шаблона пользователя#

  1. Откройте список пользователей.

  2. В дереве групп добавьте новую группу Пользователи библиотеки

  3. В новой созданной группе создайте запись и укажите значение полей:

    • Учетная запись = LbrUserTemplate

    • Тип = Внутренний пользователь

    • Является шаблоном = true

    • Наименование шаблона = Пользователь библиотеки

    • Выводить под операцией создания = true

  4. Выдайте права на профиль Библиотека, только чтение

Создание пользователей#

  1. Переоткройте список пользователей, чтобы обновилась клонируемая операция создания по шаблону.

  2. Под операцией Создать теперь доступна операция Пользователь библиотеки

  3. Используя новую операцию создайте пользователей:

    • userRO

    • userFull

  4. Изначально пароль идентичен логину. Что бы оставить его, необходимо убрать галочку Пользователь должен сменить пароль авторизации (рекомендуется сделать простой пароль или оставить его равным логину, для последующего быстрого тестирования).

  5. Пользователи обладают всеми настройками шаблона, и имеют права на профиль Библиотека, только чтение

  6. Выполните для обоих пользователей операцию Пересчитать индексацию привилегий

Проверка работоспособности пользователей#

  1. Авторизуйтесь под обоими пользователями, и проверьте, что доступно одно приложение (когда у пользователя доступно одно приложение, оно сразу запускается без выбора.)

Разграничение прав на заказы#

  1. Создайте роль Просмотр заказов

  2. На закладке Права роли найдите адм. объекты Lbr_InOrder и Lbr_OutOrder

  3. Снимите с них признак Не распространяются настройки администрирования

  4. И выдайте права на Чтение для всего адм. объекта.

  5. Профилю Библиотека, только чтение подключите роль Просмотр заказов

  6. В карточке профиля выполните операцию Пересчитать индексацию привилегий для всех пользователей профиля

  7. Зайдите под пользователями и убедитесь, что теперь они не могут редактировать заказы.

  8. Создайте роль Редактирование заказов

  9. Для адм. объектов Lbr_InOrder и Lbr_OutOrder выдайте ей права Полный доступ

  10. Создайте профиль Библиотека, полный доступ, подключите к нему роль Редактирование заказов

  11. Пользователю userFull выдайте профиль Библиотека, полный доступ

  12. Синхронизируйте привилегии пользователя userFull

  13. Прелогиньтесь под пользователем userFull и убедитесь, что у него есть полные права на заказы.

  14. Прелогиньтесь под пользователем userRO и убедитесь, что у него остались права только на чтение заказов

Разграничение прав на пункты меню#

  1. Каждое приложение - отдельный адм. объект. Снимите с адм. объекта Lbr_MainMenuAvi признак Не распространяются настройки администрирования

  2. Перейдите в карточку роли Доступ к библиотеке

  3. Перейдите на закладку Приложения, доступные для роли

  4. Откройте детализацию, выдайте доступ ко всем элементарным привилегиям, кроме Настройки

  5. Выполните операцию Пересчитать индексацию привилегий для всех пользователей роли

  6. Перелогиньтесь под пользователями, убедитесь, что для них не доступен пункт меню «Настройки»

  7. Создайте роль Настройка библиотеки

  8. Выдайте ей права на приложение библиотеки, и на пункт меню Настройки

  9. Выдайте эту роль пользователю userFull

  10. Проверьте, что у пользователя появились права на пункт меню

Управление типом привилегии операции.#

  1. В Lbr_PublisherAvi для операций Дополнительно и Статистика текущей группы смените тип привилегии на чтение, используя аннотацию AcPrivilegeType

  2. Соберите проект, обновите адм. объект Lbr_Publisher

  3. Создайте роль Просмотр издателей

    • выдайте ей права только чтение на адм. объект Lbr_Publisher

    • выдайте userFull и userRO права на эту роль

  4. Пересчитайте индексацию для пользователей роли (операция в карточке или списке ролей), убедитесь что у пользователей userFull и userRO появилась операции Дополнительно и Статистика текущей группы а издательства не редактируются

Запрет элементарной привилегии#

  1. Создайте роль Запрет просмотра статистики по группе издательств

  2. Найдите адм. объект Lbr_Publisher и для адм. элемента Lbr_PublisherAvi#Default, в детализации установите признак Запрещено на операции просмотра статистики по группе.

  3. Создайте новый профиль, подключите к нему эту роль, выдайте профиль пользователю userRO

  4. Пересчитайте индексацию для пользователей, убедитесь что у пользователя userRO нет доступа к операции просмотра статистики

Администрирование переходов состояний#

  1. Для адм. объекта Lbr_OutOrder снимите признак Не требуется настройка прав доступа на состояния.

  2. Для класса Lbr_OutOrder добавьте новоё состояние Согласуется и настройте переходы состояний. \

    Примечание

    Переход состояний должен быть: Оформляется -> Согласуется -> Выполнен

    Руководство разработчика: Тип объекта # Переходы состояний

  3. Создайте роль Права на все переходы состояний, дайте ей доступ на все возможные переходы адм. объекта Lbr_OutOrder

  4. Создайте роль Права на перевод в Согласуется, дайте ей доступ на перевод только в Согласуется для адм. объекта Lbr_OutOrder

  5. Выдайте этим ролям права на редактирование атрибута Состояние элемента Lbr_OutOrderAvi#Default

  6. Роль Права на перевод в Согласуется выдайте профилю Только чтение, пересчитайте индексацию пользователей профиля.

  7. Роль Права на все переходы состояний выдайте профилю Полный доступ, пересчитайте индексацию пользователей профиля.

  8. Зайдите под пользователем userRO в систему, он может переводить состояния заказов Lbr_OutOrder только в Согласуется

  9. Зайдите под пользователем userFull в систему, он может переводить заказы Lbr_OutOrder в любое состояние

Объектные привилегии#

  1. Объявите в классе Lbr_Publisher новую объектную привилегию Ввод санкций Руководство администратора: Введение # Объектные привилегии

  2. Соберите проект, обновите адм. объект Lbr_Publisher

  3. В Lbr_PublisherApi переопределите метод установки объектных характеристик setAttrValue (см. урок 6), в котором:

    • проверяйте, если устанавливается значение атрибута с именем dSanctionBegin, проверяйте наличие объектной привилегии «Ввод санкций» методом ru.bitec.app.btk.Btk_AdminPkg#hasObjPriv

    • если привилегии у пользователя нет, то выдавайте ошибку Не удалось ввести санкции в отношении <Headline издательства>, т.к. не достаточно прав

  4. Создайте роль Ввод санкций на издательства

  5. Выдайте ей права на объектную привилегию Ввод санкций

  6. Выдайте роль пользователю userFull через профиль Полный доступ

  7. Для роли Просмотр издателей выдайте права на операцию Обновить характеристики.

  8. Синхронизируйте пользователей, проверьте что у обоих юзеров есть права на операцию, но userRO при попытке ввести санкции получает ошибку о недостаточности прав, а userFull успешно их вводит.

Управление принадлежностью выборки к адм. объектам#

В этом примере будет разобран пример, когда стандартное определение адм. объекта не будет работать.

  1. Создайте отображение для отображения связей документов в отдельной форме

    • в Lbr_linkAvi создайте новый trait List_gidDocForChoose наследник от List_gidDoc

    • переопределите в нем метод getGidMaster, он должен получать значение переменной gidDoc_dz в текущей выборке (getVar)

    • создайте метод создания отображения

    • объявите в avm новое отображение

  2. В Lbr_InOrderAvi создайте новую операцию:

    • тип привилегии - Чтение

    • операция открывает выборку Lbr_linkAvi#List_gidDocForChoose с передачей в нее параметра с именем gidDoc_dz и значением равным gid-у текущей записи

  3. Соберите проект, и под пользователем admin попробуйте выполнить эту операцию, вы должны увидеть все связи текущего заказа.

  4. Теперь попробуйте сделать это под одним из ограниченных пользователей. Перед этим нужно обновить адм. объект Lbr_InOrder и пересчитать индексацию пользователей, т.к. появилась новая операция. Пользователи при открытии списка связей в отдельной форме не будут иметь прав на выборку, хотя эта же выборка хорошо работает как закладка, и права на нее выданы.

    Это происходит из-за того, что стандартный способ определения адм. объекта не работает, когда мы открыли коллекцию переменной ссылочности вне формы мастера.

    В этом случае необходимо самому определять алгоритм определения адм. объекта.

  5. Т.к. мы отображаем записи одного документа, то адм. объект будем определять от переданного gid-а, для этого в Lbr_linkAvi#List_gidDocForChoose:

    • переопределите метод acObject, который определяет класс из переданного gid-а, и возвращает имя этого класса (т.к. имя адм. объекта равно имени класса)

    • переопределите метод acObjectItem, чтобы он возвращал строку вида: <Имя класса>\Lbr_linkAvi - так же как эта коллекция отображается в администраторе в детализации к адм. объекту, но без суффикса #Default

Создание отдельной группы элементарных привилегий#

Отображение как отдельный элемент#

  1. Для отображения Lbr_linkAvi#List_gidDocForChoose укажите в avm свойство acItemRep="List_gidDocForChoose"

  2. Обновите адм. объект Lbr_InOrder

  3. В списке элементов появилась новая запись Lbr_InOrder\Lbr_linkAvi#List_gidDocForChoose. Теперь отображение Lbr_linkAvi#List_gidDocForChoose администрируется как отдельный элемент, и позволяет выдавать на него права отличные от всех остальных отображений.

Элементарные привилегии как отдельный элемент#

  1. В Lbr_InOrderAvi для операции отображения связей документа и удаления укажите аннотацию @AcItemRep(name="SeparatePrivs")

  2. Обновите адм. объект Lbr_InOrder

  3. В списке элементов появилась новая запись Lbr_InOrderAvi#SeparatePrivs. Теперь на эти операции можно выдавать права через отдельный элемент.

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

В главном меню приложения Управление библиотекой добавьте операцию Информация о пользователе под пунктом меню Помощь.

Операция должна выводить сообщение следующего вида:

Идентификатор пользователя: 101
Имя пользователя: userFull
Супер-пользователь: нет
Количество ролей пользователя: 42
Есть роль "Права на все переходы состояний": да

Примечание

  • Получить ИД пользователя Btk_UserApi().getCurrentUserID()

  • Получить имя пользователя Btk_UserApi().getCurrentUserName

  • Признак супер-пользователя session.user.isSuperUser

  • Получить поли пользователя Btk_UserApi().getRoles

  • Проверка наличия роли Btk_AdminPkg().hasRole

Замещение прав#

  1. В замещении прав укажите, что userRO замещает userFull

  2. Синхронизируйте пользователей, убедитесь что userRO обладает всеми правами пользователя userFull