#acl #loopbackjs
#acl #loopbackjs
Вопрос:
Некоторое время я ломаю голову над тем, как лучше всего определить ACL в моих моделях. У меня есть дерево модели, подобное этому:
Project -> Issue -> Objective -> Action -> Planning
Каждый проект управляется несколькими пользователями (некоторые имеют доступ только для чтения, другие имеют полный доступ). Если пользователь не связан с проектом, он не может получить к нему доступ. Каждый дочерний объект знает только своего родителя (ParentID).
Как я могу проверить, что пользователь X может получить доступ к планированию Y?
Я тестировал вложенные модели, и это работает нормально, но только на первом уровне ( Project -> Issue
). Я уже пробовал распознаватель ролей, в котором я прохожу через все родительские модели для проекта, но это некрасиво и должно выполняться для каждой модели. Один сказал мне добавить свойство ProjectID для всех дочерних объектов, но это явно не чисто.
Большое вам спасибо за вашу помощь,
Тьерри
Ответ №1:
Самый чистый способ — это, безусловно, определить belongsTo
Project
отношение для каждого подобъекта (Проблема, Цель, Действие, Планирование).
Таким образом, вы можете использовать всю систему контроля доступа из loopback и использовать динамические роли.
Вы также могли бы реализовать разрешение ролей без него, но, как вы сказали, это должно повторяться для каждой модели, и в конечном итоге это просто написание большего количества кода и выполнение большего количества запросов для выполнения того же самого, что и отношение.