Как подойти к определению расширенных разрешений и авторизации для отношений «многие ко многим» с помощью Postgraphile?
Представьте, что у меня есть отношения «многие ко многим» (любезно заимствованные из официального документы и настроены с упрощенными разрешениями):
create table post (
id serial primary key,
headline text,
body text,
summary text
);
create table author (
id serial primary key,
name text
);
create type post_permission as enum (
'owner', -- assume owner can change `headline`, `summary` and `body` of a post
'editor' -- assume editor can modify `summary` of a post
);
create table post_author (
post_id integer references post,
author_id integer references author,
permission post_permission,
primary key (post_id, author_id)
);
Я могу создать политику безопасности на уровне строк, например:
create policy update_post on post for update to app_user using (
EXISTS(
SELECT 1
FROM post_author as pa
WHERE pa.post_id = post.id
AND pa.author_id = app_hidden.current_user_id()
AND pa.permission = 'owner'
)
);
-- Assume `app_hidden.current_user_id()` returns a logged in user id
Но поскольку я недавно преобразовал MySQL в PostgreSQL, я пытаюсь проверить, могу ли я выполнить проверку политики pa.permission
, описанную выше, в отношении попытки изменения и разрешить только permission = owner
обновлять все поля сообщения, тогда как пользователь с permission = editor
может просто обновить summary
.
Я знаю, что это часто выполняется на уровне приложения, а не в базе данных, но решил, что сначала увижу, что возможно.
Спасибо!
См. Также связанную тему здесь.