Как правильно определить управление доступом для дочернего объекта n-уровня в цикле?

#acl #loopbackjs

#acl #loopbackjs

Вопрос:

Некоторое время я ломаю голову над тем, как лучше всего определить ACL в моих моделях. У меня есть дерево модели, подобное этому:
Project -> Issue -> Objective -> Action -> Planning
Каждый проект управляется несколькими пользователями (некоторые имеют доступ только для чтения, другие имеют полный доступ). Если пользователь не связан с проектом, он не может получить к нему доступ. Каждый дочерний объект знает только своего родителя (ParentID).

Как я могу проверить, что пользователь X может получить доступ к планированию Y?

Я тестировал вложенные модели, и это работает нормально, но только на первом уровне ( Project -> Issue ). Я уже пробовал распознаватель ролей, в котором я прохожу через все родительские модели для проекта, но это некрасиво и должно выполняться для каждой модели. Один сказал мне добавить свойство ProjectID для всех дочерних объектов, но это явно не чисто.

Большое вам спасибо за вашу помощь,
Тьерри

Ответ №1:

Самый чистый способ — это, безусловно, определить belongsTo Project отношение для каждого подобъекта (Проблема, Цель, Действие, Планирование).

Таким образом, вы можете использовать всю систему контроля доступа из loopback и использовать динамические роли.

Вы также могли бы реализовать разрешение ролей без него, но, как вы сказали, это должно повторяться для каждой модели, и в конечном итоге это просто написание большего количества кода и выполнение большего количества запросов для выполнения того же самого, что и отношение.