#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, чтобы запросы работали нормально на основе ограничений уровня арендатора.
В случае обеспечения безопасности на уровне записей у нас могут быть все идентификаторы, к которым можно получить доступ, как показано ниже, для каждой операции CRUD в базе данных.
Проблема с приведенным ниже подходом заключается в том, что по мере роста данных должен увеличиваться столбец, или у вас есть плоское сопоставление идентификаторов и разрешений. Есть варианты, чтобы настроить это, если подход подходит для ваших требований.