1.50M

Презентация

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 TRSysAdminUnitRoot

5.

ВХОЖДЕНИЕ ПОЛЬЗОВАТЕЛЯ В РОЛИ
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.

DBSecurityEngine
BPMSoft.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.checkCanEdit
BPMSoft.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
English     Русский Правила