У нас есть одна установка Parse Server (вариант B) с более чем 1500 «Клиентами / Компаниями», и мы используем несколько ролей для управления ACL каждой строки. Это прекрасно работает и может легко масштабироваться (мы используем Sashido и back4App с их автоматическим масштабированием).
Способ, которым мы делаем это (используя вашу терминологию), заключается в том, чтобы иметь класс Customer
, который содержит основную запись этого клиента. Затем мы создаем несколько ролей, используя Customer.id в качестве префикса для имени роли, например, для Клиента wDEuKFGTBo
мы создаем роли: wDEuKFGTBo_admin
, wDEuKFGTBo_user
и т. д. Каждому User
присваивается / добавляется соответствующая роль (и).
Затем мы проверяем, что у каждого другого класса есть столбец Customer
, в котором есть указатель на соответствующую запись Customer.
Затем мы добавляем следующий beforeSave
хук к каждому классу:
Parse.Cloud.beforeSave("CLASS", function(request,response) {
var acl = new Parse.ACL();
var comp = request.object.get('Customer').id;
acl.setRoleReadAccess(comp + '_admin', true);
acl.setRoleWriteAccess(comp + '_admin', true);
acl.setRoleReadAccess(comp + '_user', false);
acl.setRoleWriteAccess(comp + '_user', false);
request.object.setACL(acl);
response.success();
});