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

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

Entity Operations

Entity Attributes

Read Constraint
checked in database (1)

Read Constraint
checked in memory (2)

Create/Update/Delete
Constraints

EntityManager

Нет

Нет

Нет

Нет

Нет

DataManager on middle tier

Нет
Да (3) (4)

Нет
Да (5)

Да

Нет
Да (4)

Нет
Да (4)

DataManager.secure on middle tier

DataManager on client tier

Да (3)

Нет
Да (5)

Да

Да

Да

Generic UI data-aware components

Да

Да

- (6)

- (6)

- (6)

REST API /entities

Да

Да

Да

Да

Да

REST API /queries

Да

Да

Да

Да

- (7)

REST API /services

Да

Да

- (8)

- (8)

- (8)

Замечания:

1) Ограничения чтения с проверкой в базе данных влияют только на корневую сущность.

// order is loaded only if it satisfies constraints on the Order entity
Order order = dataManager.load(Order.class).viewProperties("date", "amount", "customer.name").one();
// related customer is loaded regardless of database-checked constraints on Customer entity
assert order.getCustomer() != null;

2) Ограничения чтения с проверкой в памяти влияют и на корневую сущность, и на все связанные сущности в загруженном графе.

// order is loaded only if it satisfies constraints on the Order entity
Order order = dataManager.load(Order.class).viewProperties("date", "amount", "customer.name").one();
// related customer is not null only if it satisfies in-memory-checked constraints on Customer entity
if (order.getCustomer() != null) ...

3) Разрешения на операцию c сущностью в DataManager проверяются только для корневой сущности.

// loading Order
Order order = dataManager.load(Order.class).viewProperties("date", "amount", "customer.name").one();
// related customer is loaded even if the user has no permission to read the Customer entity
assert order.getCustomer() != null;

4) DataManager проверяет разрешения на операцию c сущностью и in-memory ограничения на среднем слое только если свойство приложения cuba.dataManagerChecksSecurityOnMiddleware установлено в true.

5) DataManager проверяет разрешения на атрибуты сущности только если свойство приложения cuba.entityAttributePermissionChecking установлено в true.

6) UI-компоненты не проверяют ограничения сами, но когда данные загружаются стандартным способом, ограничения налагаются в DataManager. В результате, если некоторый экземпляр сущности отфильтрован ограничениями, соответвующий UI-компонент отображается, но он пустой. Кроме того, любое действие, унаследованное от класса ItemTrackingAction, можно связать с ограничением определенного типа, так что действие будет доступным только когда проверка ограничения выполнена успешно.

7) REST-запросы выполняют только чтение данных.

8) Параметры и результаты методов REST-сервисов не проверяются на соответствие ограничениям. Поведение сервиса в отношении ограничений определяется тем, как он читает и сохраняет данные, например, использует ли он DataManager или DataManager.secure().