Parse Server Saas (роли или несколько установок) - PullRequest
0 голосов
/ 26 апреля 2018

Мне нужна помощь. Я планирую разработать проект Saas и предоставить его 500-1000 клиентам. Каждый клиент будет иметь около 1000 членов, и каждый участник может использовать мобильное приложение для отслеживания информации о фитнесе.

Итак, мой вопрос! Каков наилучший способ развертывания и доставки или реализации проекта.

A) У каждого клиента есть установка сервера разбора, и при входе в систему пользователь должен ввести customerId, email и пароль. CustomerId сопоставляется с поддоменом, а поддомен сопоставляет сервер синтаксического анализа. Вот пример customerId 100123 сопоставления с 100123.example.com

B) Работа с ролями и установка ролей для каждого объекта в customerId

Как лучше всего решить проблему. В решении А) накладные расходы связаны с администрированием, настройкой и настройкой. Но с другой стороны, у каждого клиента есть своя база данных. В решении B) его легко масштабировать, сервер разбора может быть размещен на heroku, и с помощью нескольких щелчков мышью я могу автоматически масштабировать доставку новых клиентов.

Есть ли опыт? Возможно ли, что 500K или 1M пользователи могут использовать один сервер синтаксического анализа.

1 Ответ

0 голосов
/ 16 мая 2018

У нас есть одна установка 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();

});
...