Урок 10. Администрирование, аудит#
Цель данного урока познакомить слушателя с принципами администрирования и аудита.
Аудит#
Аудит предназначен для фиксации различных событий при работе пользователей в системе: вставка, изменение, удаление, выполнение операций, и т.д.
Аудит является сервисной возможностью и может быть включен для любого класса в системе.
Для изучения смотри:
Пользователь#
С точки зрения системы пользователем является учетная запись, на которую выдается перечень прав дающий возможность юридическому или физическому лицу выполнять действия в системе.
Для изучения смотри:
Администрируемый объект#
Администрируемый объект - это логически связанный для массовой раздачи прав набор привилегий.
Административный объект генерируется по объектам системы и позволяет единым образом выдавать права на них.
Для изучения смотри:
Объектные привилегии#
Объектные привилегии позволяют раздавать права на бизнес логику.
Для изучения смотри:
Элементарная привилегия#
Элементарные привилегии используются для разграничения действий пользователя в пользовательском интерфейсе.
Для изучения смотри:
Роль#
Роль - административная единица для выдачи прав.
В роле выдаются гранты на привилегии.
Для изучения смотри:
Профиль пользователя#
Профили пользователя используются для группировки ролей и более удобной раздачи их пользователю.
Для изучения смотри:
Практика#
Аудит#
Включите аудит на документе
Lbr_InActи его позицияхLbr_InActDetСоздайте структуру хранения аудита для класса
Lbr_InActСоздайте новый документ
Посмотрите аудит по новому документу.
Произвольная запись в аудит.#
Включите аудит на справочнике
Lbr_PublisherДоработайте операцию
Обновить характеристики: если успешно введены санкции, то в аудит пишется запись «Санкции успешно введены». Для создания произвольной записи используйте методru.bitec.app.btk.class_.service.audit.Btk_AuditPkg#insertRow
Синхронизация исходного кода и данных администрирования#
Обновить администрируемые объекты модуля lbr.
Руководство администратора: Приложение администратор # Групповая настройка привилегий ролей
Создание роли доступа к приложению#
Откройте список ролей.
В дереве групп добавьте новую группу
Роли библиотекиВ новой созданной группе создайте роль
Доступ к библиотекена закладке
Приложения, доступные для роливыдайте права на приложениеУправление библиотекой
Создание профиля#
Откройте список профилей.
В дереве групп добавьте новую группу
Профили библиотекиВ новой созданной группе создайте профиль
Библиотека, только чтениеПодключите к профилю роль
Доступ к библиотеке
Создание шаблона пользователя#
Откройте список пользователей.
В дереве групп добавьте новую группу
Пользователи библиотекиВ новой созданной группе создайте запись и укажите значение полей:
Учетная запись =
LbrUserTemplateТип =
Внутренний пользовательЯвляется шаблоном =
trueНаименование шаблона =
Пользователь библиотекиВыводить под операцией создания =
true
Выдайте права на профиль
Библиотека, только чтение
Создание пользователей#
Переоткройте список пользователей, чтобы обновилась клонируемая операция создания по шаблону.
Под операцией
Создатьтеперь доступна операцияПользователь библиотекиИспользуя новую операцию создайте пользователей:
userROuserFull
Изначально пароль идентичен логину. Что бы оставить его, необходимо убрать галочку
Пользователь должен сменить пароль при входе(рекомендуется сделать простой пароль или оставить его равным логину, для последующего быстрого тестирования).Пользователи обладают всеми настройками шаблона, и имеют права на профиль
Библиотека, только чтениеВыполните для обоих пользователей операцию
Пересчитать индексацию привилегий
Проверка работоспособности пользователей#
Авторизуйтесь под обоими пользователями, и проверьте, что доступно одно приложение (когда у пользователя доступно одно приложение, оно сразу запускается без выбора.)
Разграничение прав на заказы#
Создайте роль
Просмотр заказовНа закладке
Права ролинайдите адм. объекты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создайте новыйtraitList_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