ACL гранулярность - PullRequest
       8

ACL гранулярность

0 голосов
/ 20 января 2019

Я пытаюсь реализовать ACL для моего приложения nodejs.Скажем, у меня есть следующие конечные точки:

/api/user
/api/picture 

Изображения принадлежат пользователям.

ACL может разрешить / запретить доступ на основе userId к конечной точке.Если запрос приходит к / api / user, ACL легко узнает, может ли определенный userId получить доступ к его собственным данным или нет: если я userId = 23 и я делаю GET для / api / user / 23, то естьпрямая связь между запрашиваемым ресурсом и данными, предоставляемыми для проверки.

Теперь, если запрос приходит к / api / picture с pictureId, ACL не знает о связи между пользователями и изображениями.скажем / api / picture / 60;ACL не знает, принадлежит ли pictureId = 60 к userId = 23 (используется в приведенном выше примере).

Знаете ли вы, есть ли какое-либо решение ACL для nodejs, которые поддерживают этот вид контроля доступа?Насколько гранулированным будет ACL?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Детализация ACL на уровне документа всегда сложна, так как ваш набор данных будет расти, могут возникнуть проблемы с производительностью. Лично я предпочитаю хранить документы такого типа с использованием GraphDB , например Neo4J , так как ИМХО это намного надежнее, чем реляционная база данных, когда этот тип ACL управляет своими запросами.

0 голосов
/ 25 февраля 2019

Есть одно решение, но оно требует много работы.

В базе данных таблицы рисунков вы можете создать столбец ACL, который будет содержать данные о том, кто имеет доступ к этому элементу. И тогда, когда это произойдет:

запрос приходит в / api / picture with pictureId

я предполагаю, что вы знаете userId пользователя, вошедшего в систему в данный момент?

Если да, вы можете сделать следующее. Получите Picture из базы данных с pictureId и сравните userId из ACL столбца с текущим вошедшим пользователем. Если userId от текущего вошедшего в систему пользователя находится в столбце ACL, то этот пользователь может прочитать / получить этот рисунок.

Если вы хотите, вы можете добавить больше функциональности, добавив действия, которые пользователь может выполнять в Picture (Создать, Читать, Обновить, Удалить).

...