Similar presentations:
Презентация
1.
Ролевая модель BPMSoftПетрухин Николай Владимирович
2.
ПЛАН СЕМИНАРА1.
Краткая теория о ролевой модели
2.
Основные таблицы в БД связанные с ролями
3.
Наследование прав и особенности с точки зрения разработки.
4.
Права доступа на объекты
4.1. Права доступа по операциям
4.2. Права доступа по записям
4.3. Права доступа по колонкам
5.
Права доступа на операции
6.
Работа с правами из кода
3.
ОБЪЕКТ АДМИНИСТРИРОВАНИЯSysAdminUnitTypeValue
SysAdminUnit
Колонка
Описание
Id
Уникальный
идентификатор
Name
Название
ParentRole
Родительская
роль
SysAdminUnitTypeValue Тип
Число
Значение
0, 1, 2, 3
Организационные роли (Организация - 0,
Подразделение - 1, Менеджер - 2 и
Команда - 3)
4
Пользователь
5
Пользователь Портала
6
Функциональная роль
4.
TRIGGER TRSysAdminUnitRoot5.
ВХОЖДЕНИЕ ПОЛЬЗОВАТЕЛЯ В РОЛИSysUserInRole
Колонка
Описание
SysRole
Роль
SysUser
Пользователь
Source
Число
Значение
1
Сам пользователь
SysAdminUnitInRole
2
Явное вхождение в роль
Колонка
Описание
4
Делегированная роль
SysAdminUnit
Пользователь входящий в
роль
8
Получение функциональной роли из
организационной роли
SysAdminUnitRole
Роль
16
Получение роли по иерархии ролей
SourceAdminUnit
Источник получения роли
пользователем
32
Получение роли менеджера
(наследование по руководителю)
Source
Бинарная сумма
источника роли
6.
РАССЧЁТ БИНАРНОЙ СУММЫ ИСТОЧНИКА РОЛИПример.
Существует пользователь, который явно
входит в роль «Программист» и так же он
входит в дочернюю от нее роль «Тимлид».
Тогда значение Source рассчитывается
следующим образом:
Явное вхождение в роль = 2 (00010).
(18)
Явное вхождение в роль (2)
Программист
Дочерняя
роль
Получение роли по иерархии ролей = 16
(10000).
2 (00010) + 16 (10000) = 18 (10010)
Пользователь
Получение роли по иерархии ролей (16)
Тимлид
7.
ДОПОЛНИТЕЛЬНО УНАСЛЕДОВАННЫЕ ПРАВАSysAdminUnitGrantedRight
Колонка
Описание
GranteeSysAdminUnit
Получает права
GrantorSysAdminUnit
Раздаёт права
8.
ПРАВА ДОСТУПА НА ОБЪЕКТЫ9.
ПРАВА ДОСТУПА ПО ОПЕРАЦИЯМSysEntitySchemaOperationRight
Колонка
Описание
SysAdminUnitId
Пользователь/роль
SubjectSchemaUId
Uid объекта
CanAppend
Право на добавление
CanRead
Право на чтение
CanEdit
Право на изменение
CanDelete
Право на удаление
Position
Приоритет
10.
ВИРТУАЛЬНЫЙ ОБЪЕКТ И ТАБЛИЦА БД11.
ПРАВА ДОСТУПА ПО ЗАПИСЯМSysEntitySchemaRecordDefRight
Operation
Колонка
Описание
Число Значение
SubjectSchemaUId
UId объекта
0
Автор передаёт права только на чтение записи
1
Автор передаёт права на чтение и изменение
записи
2
Автор передаёт права на чтение, изменение и
удаление записи
Author
Создатель записи
Grantee
Получатель прав
на запись
Operation
Права доступа на
запись
RightLevel
Position
Уровень доступа к
записи
RightLevel
Число Значение
0
Получатель прав не имеет доступа к записи
1
Получатель прав имеет доступ к записи
2
Получатель прав имеет доступ к записи и может
предоставить доступ к ней другому
пользователю/роли
Приоритет
12.
ПРАВА ДОСТУПА ПО ЗАПИСЯМКОНКРЕТНОГО ОБЪЕКТА
Sys[Имя объекта]Right
SysEntitySchemaRecRightSource
Колонка
Описание
Код
Значение
RecordId
UId объекта
Author
Права создателя записи на эту запись
Default
Права, полученные в соответствии с
настройками прав
SysAdminUnitId
Создатель записи
Operation
Права доступа на
запись
Manual
Права, назначенные через интерфейс
раздачи прав
RightLevel
Уровень доступа к
записи
Owner
Права ответственного на эту запись
Position
Приоритет
SourceId
Уровень доступа
записи в объекте
13.
НАСЛЕДОВАНИЕ ДОСТУПА ПО ЗАПИСЯМОбъект1
Доступ по записям ✅
Наследует
доступ
Объект2
Доступ по записям ❎
Наследует
доступ
Объект3
Доступ по записям ❎
В Объект2 действуют права доступа по записям унаследованные от Объект1.
В Объект3 НЕ действуют права доступа по записям, так как у Объект2 они не
настроены.
14.
ПРАВА ДОСТУПА ПО КОЛОНКАМSysEntitySchemaColumnRight
RightLevel
Колонка
Описание
Число Значение
SubjectSchemaUId
UId объекта
0
Доступ к колонке объекта запрещён
SubjectColumnUId
UId колонки объекта
1
Разрешено чтение колонки объекта
SysAdminUnit
Пользователь/роль
2
Разрешено редактирование колонки
объекта
RightLevel
Уровень доступа к записи
Position
Приоритет
15.
ПРАВА ДОСТУПА НА ОПЕРАЦИИSysAdminOperationGrantee
Колонка
Описание
SysAdminOperation
Операция
SysAdminUnit
Пользователь/роль
CanExecute
Уровень доступа
Position
Приоритет
16.
БЛОК БП «ИЗМЕНИТЬ ПРАВА ДОСТУПА»17.
Query-запросыНе учитывают права доступа!
18.
EntitySchemaQueryПрава доступа учитываются по умолчанию. Для обхода ограничения:
esqManager.UseAdminRights = false;
19.
ODataПрава доступа всегда учитываются!
Дополнительно проверка на операцию «Доступ к OData».
20.
DBSecurityEngineBPMSoft.Core.DB.DBSecurityEngine
// Возвращает доступ текущего пользователя к операции:
// Доступ к рабочему месту "Администрирование".
return UserConnection.DBSecurityEngine.GetCanExecuteOperation(
"CanManageAdministration");
// Проверяет доступ к рабочему месту "Администрирование".
// Если доступа нет, генерирует исключение SecurityException.
UserConnection.DBSecurityEngine.CheckCanExecuteOperation(
"CanManageAdministration");
// Возвращает уровень доступа пользователя с id = userId,
// на чтение записи с id = recordId объекта с именем schemaName.
var rightsLevel = UserConnection.DBSecurityEngine.GetEntitySchemaRecordRightLevel(
userId, schemaName, recordId);
return rightsLevel.HasFlag(SchemaRecordRightLevels.CanRead);
21.
RightUtilities.checkCanExecuteOperations// Проверка прав доступа пользователя на операции
// и запись полученных значений в атрибуты.
initRightAttributes: function(callback, scope) {
// Список операций.
const operations = ["CanImportContactsFromGoogle", "CanImportFromExcel"];
// Запись полученных значений в атрибуты.
const handler = function(result) {
this.set("CanImportContactsFromGoogle", result.CanImportContactsFromGoogle);
this.set("CanImportFromExcel", result.CanImportFromExcel);
if (callback) {
callback.call(scope || this);
}
};
// Вызов функции проверки доступа.
RightUtilities.checkCanExecuteOperations(operations, handler, this);
}
22.
RightUtilities.checkCanEditBPMSoft.Core.DB.DBSecurityEngine
// Обработка нажатия кнопки "В работу".
toWorkButtonClick: function() {
// Проверка доступа на редактирование текущего объекта.
RightUtilities.checkCanEdit({
schemaName: this.entitySchemaName,
primaryColumnValue: this.get("Id"),
isNew: this.isNew
}, function (result) {
if (Ext.isEmpty(result)) {
this.loadLookupDisplayValue("Status", Constants.Status.ToWork);
this.loadLookupDisplayValue("AppointedSpecialist",
BPMSoft.SysValue.CURRENT_USER_CONTACT.value);
} else {
BPMSoft.showInformation(resources.localizableStrings.ErrorRightsToChange);
}
}, this);
}
23.
СПАСИБО ЗА ВНИМАНИЕг. Курск, ул. Ленина, д. 60