Разработка многопользовательской базы данных SAAS с помощью Postgres RLS

#postgresql #multi-tenant #supabase #rls #supabase-database

#postgresql #многоквартирный дом #супабаза #rls #supabase-база данных

Вопрос:

Я хочу создать многопользовательскую базу данных SAAS с использованием PostgreSQL и RLS. Я хочу иметь возможность размещать всех пользователей и арендаторов в одной базе данных и изолировать их данные с помощью RLS.

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

Однако мне нужно, чтобы у арендаторов были пользовательские данные, уникальные для их организации, такие как дата присоединения или другие данные. Что мне нужно знать, так это то, как я могу спроектировать базу данных для хранения всех данных, относящихся к конкретной организации. Я подумал об использовании JSONB для хранения этих данных, таких как

 user_data_for_tenant  id user_id tenant_id data JSONB  

это data решает арендатор с внешнего интерфейса.

Это нормально? Как лучше спроектировать базу данных в соответствии с этим вариантом использования?

Я буду использовать Supabase для БД, аутентификации, хранения и других целей, чтобы RLS мог контролировать доступ.

Комментарии:

1. есть ли у вас общие пользователи между арендаторами в вашем приложении?

Ответ №1:

Я хотел бы предложить следующий дизайн для управления данными для разрешений (он же Права доступа пользователя)

У нас может быть таблица, в которой пользователи-арендаторы сопоставлены с каждой сущностью в приложении SaaS. Там будут такие разрешения , как Permission-C значение Permission Create и так далее, для обновления, удаления и чтения.

Администратор арендатора может настроить уровень доступа для каждого пользователя в своем арендаторе на основе ролей, и мы можем внутренне использовать эти роли для управления политиками в Postgresql, чтобы запросы работали нормально на основе ограничений уровня арендатора. Реализация безопасности на уровне мультитенантной организации для приложения SaaS

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

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

сопоставление безопасности на уровне строк