Урок 10. Администрирование, аудит
Contents
Урок 10. Администрирование, аудит#
Цель данного урока познакомить слушателя с принципами администрирования и аудита.
Аудит#
Аудит предназначен для фиксации различных событий при работе пользователей в системе: вставка, изменение, удаление, выполнение операций, и т.д.
Аудит является сервисной возможностью и может быть включен для любого класса в системе.
Для изучения смотри:
Пользователь#
С точки зрения системы пользователем является учетная запись, на которую выдается перечень прав дающий возможность юридическому или физическому лицу выполнять действия в системе.
Для изучения смотри:
Администрируемый объект#
Администрируемый объект
- это логически связанный для массовой раздачи прав набор привилегий.
Административный объект генерируется по объектам системы и позволяет единым образом выдавать права на них.
Для изучения смотри:
Объектные привилегии#
Объектные привилегии
позволяют раздавать права на бизнес логику.
Для изучения смотри:
Элементарная привилегия#
Элементарные привилегии
используются для разграничения действий пользователя в пользовательском интерфейсе.
Для изучения смотри:
Роль#
Роль
- административная единица для выдачи прав.
В роле выдаются гранты на привилегии.
Для изучения смотри:
Профиль пользователя#
Профили пользователя
используются для группировки ролей и более удобной раздачи их пользователю.
Для изучения смотри:
Практика#
Аудит#
Включите аудит на документе
Lbr_InAct
и его позицияхLbr_InActDet
Создайте структуру хранения аудита для класса
Lbr_InAct
Создайте новый документ
Посмотрите аудит по новому документу.
Произвольная запись в аудит.#
Включите аудит на справочнике
Lbr_Publisher
Доработайте операцию
Обновить характеристики
: если успешно введены санкции, то в аудит пишется запись «Санкции успешно введены». Для создания произвольной записи используйте методru.bitec.app.btk.class_.service.audit.Btk_AuditPkg#insertRow
Синхронизация исходного кода и данных администрирования#
Обновить администрируемые объекты модуля lbr.
Руководство администратора: Приложение администратор # Групповая настройка привилегий ролей
Создание роли доступа к приложению#
Откройте список ролей.
В дереве групп добавьте новую группу
Роли библиотеки
В новой созданной группе создайте роль
Доступ к библиотеке
на закладке
Приложения, доступные для роли
выдайте права на приложениеУправление библиотекой
Создание профиля#
Откройте список профилей.
В дереве групп добавьте новую группу
Профили библиотеки
В новой созданной группе создайте профиль
Библиотека, только чтение
Подключите к профилю роль
Доступ к библиотеке
Создание шаблона пользователя#
Откройте список пользователей.
В дереве групп добавьте новую группу
Пользователи библиотеки
В новой созданной группе создайте запись и укажите значение полей:
Учетная запись =
LbrUserTemplate
Тип =
Внутренний пользователь
Является шаблоном =
true
Наименование шаблона =
Пользователь библиотеки
Выводить под операцией создания =
true
Выдайте права на профиль
Библиотека, только чтение
Создание пользователей#
Переоткройте список пользователей, чтобы обновилась клонируемая операция создания по шаблону.
Под операцией
Создать
теперь доступна операцияПользователь библиотеки
Используя новую операцию создайте пользователей:
userRO
userFull
Изначально пароль идентичен логину. Что бы оставить его, необходимо убрать галочку
Пользователь должен сменить пароль авторизации
(рекомендуется сделать простой пароль или оставить его равным логину, для последующего быстрого тестирования).Пользователи обладают всеми настройками шаблона, и имеют права на профиль
Библиотека, только чтение
Выполните для обоих пользователей операцию
Пересчитать индексацию привилегий
Проверка работоспособности пользователей#
Авторизуйтесь под обоими пользователями, и проверьте, что доступно одно приложение (когда у пользователя доступно одно приложение, оно сразу запускается без выбора.)
Разграничение прав на заказы#
Создайте роль
Просмотр заказов
На закладке
Права роли
найдите адм. объектыLbr_InOrder
иLbr_OutOrder
Снимите с них признак
Не распространяются настройки администрирования
И выдайте права на Чтение для всего адм. объекта.
Профилю
Библиотека, только чтение
подключите рольПросмотр заказов
В карточке профиля выполните операцию
Пересчитать индексацию привилегий для всех пользователей профиля
Зайдите под пользователями и убедитесь, что теперь они не могут редактировать заказы.
Создайте роль
Редактирование заказов
Для адм. объектов
Lbr_InOrder
иLbr_OutOrder
выдайте ей праваПолный доступ
Создайте профиль
Библиотека, полный доступ
, подключите к нему рольРедактирование заказов
Пользователю
userFull
выдайте профильБиблиотека, полный доступ
Синхронизируйте привилегии пользователя
userFull
Прелогиньтесь под пользователем
userFull
и убедитесь, что у него есть полные права на заказы.Прелогиньтесь под пользователем
userRO
и убедитесь, что у него остались права только на чтение заказов
Разграничение прав на пункты меню#
Каждое приложение - отдельный адм. объект. Снимите с адм. объекта
Lbr_MainMenuAvi
признакНе распространяются настройки администрирования
Перейдите в карточку роли
Доступ к библиотеке
Перейдите на закладку
Приложения, доступные для роли
Откройте детализацию, выдайте доступ ко всем
элементарным привилегиям
, кромеНастройки
Выполните операцию
Пересчитать индексацию привилегий для всех пользователей роли
Перелогиньтесь под пользователями, убедитесь, что для них не доступен пункт меню «Настройки»
Создайте роль
Настройка библиотеки
Выдайте ей права на приложение библиотеки, и на пункт меню
Настройки
Выдайте эту роль пользователю
userFull
Проверьте, что у пользователя появились права на пункт меню
Управление типом привилегии операции.#
В
Lbr_PublisherAvi
для операцийДополнительно
иСтатистика текущей группы
смените тип привилегии на чтение, используя аннотациюAcPrivilegeType
Соберите проект, обновите адм. объект
Lbr_Publisher
Создайте роль
Просмотр издателей
выдайте ей права только чтение на адм. объект
Lbr_Publisher
выдайте
userFull
иuserRO
права на эту роль
Пересчитайте индексацию для пользователей роли (операция в карточке или списке ролей), убедитесь что у пользователей
userFull
иuserRO
появилась операцииДополнительно
иСтатистика текущей группы
а издательства не редактируются
Запрет элементарной привилегии#
Создайте роль
Запрет просмотра статистики по группе издательств
Найдите адм. объект
Lbr_Publisher
и для адм. элементаLbr_PublisherAvi#Default
, в детализации установите признакЗапрещено
на операции просмотра статистики по группе.Создайте новый профиль, подключите к нему эту роль, выдайте профиль пользователю
userRO
Пересчитайте индексацию для пользователей, убедитесь что у пользователя
userRO
нет доступа к операции просмотра статистики
Администрирование переходов состояний#
Для адм. объекта
Lbr_OutOrder
снимите признакНе требуется настройка прав доступа на состояния
.Для класса
Lbr_OutOrder
добавьте новоё состояниеСогласуется
и настройте переходы состояний. \Примечание
Переход состояний должен быть: Оформляется -> Согласуется -> Выполнен
Создайте роль
Права на все переходы состояний
, дайте ей доступ на все возможные переходы адм. объектаLbr_OutOrder
Создайте роль
Права на перевод в Согласуется
, дайте ей доступ на перевод только вСогласуется
для адм. объектаLbr_OutOrder
Выдайте этим ролям права на редактирование атрибута
Состояние
элементаLbr_OutOrderAvi#Default
Роль
Права на перевод в Согласуется
выдайте профилюТолько чтение
, пересчитайте индексацию пользователей профиля.Роль
Права на все переходы состояний
выдайте профилюПолный доступ
, пересчитайте индексацию пользователей профиля.Зайдите под пользователем
userRO
в систему, он может переводить состояния заказовLbr_OutOrder
только вСогласуется
Зайдите под пользователем
userFull
в систему, он может переводить заказыLbr_OutOrder
в любое состояние
Объектные привилегии#
Объявите в классе
Lbr_Publisher
новую объектную привилегиюВвод санкций
Руководство администратора: Введение # Объектные привилегииСоберите проект, обновите адм. объект
Lbr_Publisher
В
Lbr_PublisherApi
переопределите метод установки объектных характеристикsetAttrValue
(см. урок 6), в котором:проверяйте, если устанавливается значение атрибута с именем
dSanctionBegin
, проверяйте наличие объектной привилегии «Ввод санкций» методомru.bitec.app.btk.Btk_AdminPkg#hasObjPriv
если привилегии у пользователя нет, то выдавайте ошибку
Не удалось ввести санкции в отношении <Headline издательства>, т.к. не достаточно прав
Создайте роль
Ввод санкций на издательства
Выдайте ей права на объектную привилегию
Ввод санкций
Выдайте роль пользователю
userFull
через профильПолный доступ
Для роли
Просмотр издателей
выдайте права на операциюОбновить характеристики
.Синхронизируйте пользователей, проверьте что у обоих юзеров есть права на операцию, но
userRO
при попытке ввести санкции получает ошибку о недостаточности прав, аuserFull
успешно их вводит.
Управление принадлежностью выборки к адм. объектам#
В этом примере будет разобран пример, когда стандартное определение адм. объекта не будет работать.
Создайте отображение для отображения связей документов в отдельной форме
в
Lbr_linkAvi
создайте новыйtrait
List_gidDocForChoose
наследник отList_gidDoc
переопределите в нем метод
getGidMaster
, он должен получать значение переменнойgidDoc_dz
в текущей выборке (getVar
)создайте метод создания отображения
объявите в
avm
новое отображение
В
Lbr_InOrderAvi
создайте новую операцию:тип привилегии - Чтение
операция открывает выборку
Lbr_linkAvi#List_gidDocForChoose
с передачей в нее параметра с именемgidDoc_dz
и значением равнымgid
-у текущей записи
Соберите проект, и под пользователем
admin
попробуйте выполнить эту операцию, вы должны увидеть все связи текущего заказа.Теперь попробуйте сделать это под одним из ограниченных пользователей. Перед этим нужно обновить адм. объект
Lbr_InOrder
и пересчитать индексацию пользователей, т.к. появилась новая операция. Пользователи при открытии списка связей в отдельной форме не будут иметь прав на выборку, хотя эта же выборка хорошо работает как закладка, и права на нее выданы.Это происходит из-за того, что стандартный способ определения адм. объекта не работает, когда мы открыли коллекцию переменной ссылочности вне формы мастера.
В этом случае необходимо самому определять алгоритм определения адм. объекта.
Т.к. мы отображаем записи одного документа, то адм. объект будем определять от переданного gid-а, для этого в
Lbr_linkAvi#List_gidDocForChoose
:переопределите метод acObject, который определяет класс из переданного
gid
-а, и возвращает имя этого класса (т.к. имя адм. объекта равно имени класса)переопределите метод acObjectItem, чтобы он возвращал строку вида:
<Имя класса>\Lbr_linkAvi
- так же как эта коллекция отображается в администраторе в детализации к адм. объекту, но без суффикса#Default
Создание отдельной группы элементарных привилегий#
Отображение как отдельный элемент#
Для отображения
Lbr_linkAvi#List_gidDocForChoose
укажите вavm
свойствоacItemRep="List_gidDocForChoose"
Обновите адм. объект
Lbr_InOrder
В списке элементов появилась новая запись
Lbr_InOrder\Lbr_linkAvi#List_gidDocForChoose
. Теперь отображениеLbr_linkAvi#List_gidDocForChoose
администрируется как отдельный элемент, и позволяет выдавать на него права отличные от всех остальных отображений.
Элементарные привилегии как отдельный элемент#
В
Lbr_InOrderAvi
для операции отображения связей документа и удаления укажите аннотацию@AcItemRep(name="SeparatePrivs")
Обновите адм. объект
Lbr_InOrder
В списке элементов появилась новая запись
Lbr_InOrderAvi#SeparatePrivs
. Теперь на эти операции можно выдавать права через отдельный элемент.
Методы работы с правами пользователя#
В главном меню приложения Управление библиотекой
добавьте операцию Информация о пользователе
под пунктом меню Помощь
.
Операция должна выводить сообщение следующего вида:
Идентификатор пользователя: 101
Имя пользователя: userFull
Супер-пользователь: нет
Количество ролей пользователя: 42
Есть роль "Права на все переходы состояний": да
Примечание
Получить ИД пользователя
Btk_UserApi().getCurrentUserID()
Получить имя пользователя
Btk_UserApi().getCurrentUserName
Признак супер-пользователя
session.user.isSuperUser
Получить поли пользователя
Btk_UserApi().getRoles
Проверка наличия роли
Btk_AdminPkg().hasRole
Замещение прав#
В замещении прав укажите, что
userRO
замещаетuserFull
Синхронизируйте пользователей, убедитесь что
userRO
обладает всеми правами пользователяuserFull