Статья в разработке. Вы можете читать все, что написано ниже, но на свой страх и риск 😎
Роли безопасности позволяют ограничивать доступ к данным для разных групп пользователей.
Внутри ozma.io
такие ограничения реализуются путем добавления к запросу пользователя условий в блок WHERE
.
Дальше опишем, как и где эти условия создавать и редактировать 🔐
В схеме admin
есть раздел с ролями Roles
. Роль observer
- базовая, от нее должны наследоваться все остальные роли.
Здесь создаем все необходимые роли для групп пользователей - в тестовом примере ограничимся двумя ролями - менеджера и руководителя:
Для каждой роли указывается:
name
- имя роли;schema_id
- схема, в которой она создается;role_parents
- родительские роли (роль может наследоваться от других ролей). Добавление observer
в качестве родительской роли - обязательно 📌;users
- пользователи с этой ролью;role_entities
- ограничения доступов к сущностям в таблице;Для каждой сущности можно указать какие необходимы ограничения для определенной роли.
В тестовом примере рассмотрим роль Manager
Для каждой сущности указывается:
select
- какие записи пользователь сможет видетьupdate
- какие записи пользователь сможет редактироватьinsert
- какие записи пользователь сможет добавлятьcheck
- какие проверки будут осуществляться во время запросов update
и insert
delete
- какие записи пользователь сможет удалятьНапример, дать менеджеру доступы только к его заказам, или заказам без ответственных менеджеров, можно следующими ограничениями в поле select
для сущности usr.orders
🔏:
-- manager's orders
-- or orders without manager
id IN
(
SELECT
orders.id
FROM
usr.orders
LEFT JOIN
usr.managers_for_orders
ON
managers_for_orders."order" = orders.id
WHERE
managers_for_orders.manager=>user = $$user_id
OR managers_for_orders.manager IS NULL
)
Логично, что update
будет распространяться только на поля, к которым пользователь сможет применить select
.
Для полного доступа ко всем записям сущности в поле можно указать ✅
true
Для полного запрета ко всем записям сущности ❌
false
Для каждой сущности можно настроить доступ к отображению полей (select
) и можно ли менять в них данные (change
)
Немного примеров, где это можно использовать:
Completed
;⭐️ В ближайшем будущем мы планируем добавить возможность показывать данные, доступа к которым у пользователя нет с заменой текста, чисел, дат на звездочки (******)
Безопасность полей настраивается в таблице role_column_fields
для каждой сущности:
column_name
- указываем название поля сущности;change
- указываем, можно ли изменять данные в этом поле;select
- указываем, при каких условиях можно показывать это поле пользователю 🤫В
admin
мы добавили на форму безопасности сущности таблицу с полями этой сущности. Те, для которых не прописана безопасность, окрашены серым. Необходимо, чтобы безопасность была настроена для каждого поля каждой сущности 🔎