RBAC - Как реализовать контроль доступа для каждого экземпляра? (DDD)

В моем приложении DDD, написанном на javascript (Node.js), я наткнулся на реализацию универсального поддоменов авторизации. Я проверил на моделях авторизации RBAC / ACL, как реализовать это, но у них, похоже, нет разрешений для каждого экземпляра, которые мне нужны.

Насколько я понимаю, у RBAC есть полномочия на основе ролей. Пользователи назначены на роли. Роли являются иерархическими и наследуют разрешения. Роли могут иметь несколько разрешений. Разрешения позволяют выполнять команды на ресурсах.

Но, как определено RBAC, ресурсы являются общими, такими как «Записи», «Комментарий», «Книга» и т. Д. Они не привязаны к конкретному экземпляру (например, «Пост» (id: 9283984)). Например, в RBAC невозможно определить, что редактировать его может только пользователь, создавший публикацию. Кажется невозможным присвоить роль «Администратор» «Пользователю (id: (8290321)») для данного «Поста (id: 2398493)»

Еще сложнее определить роли, которые имеют разрешения на выполнение команд, которые изменяют роли других людей в конкретном ресурсе.

Требования моих приложений:

User кто выпустилCreateLedger Команда автоматически назначается какAdmin этогоLedger, Он может назначать других людей только какManagers или жеCollaborators или жеViewers из книг онAdmin из. Он также может отозвать эти роли.Managers разрешено управлятьAccounts изLedger. Collaborators разрешено редактироватьTransactions на этомLedger, а такжеViewers только возможность просматривать данные (только для чтения).Admin можно назначитьAdmin роль в книгах онAdmin из другогоUser.

Моя первоначальная идея заключалась в том, что для того, чтобы пользователь мог управлять ролями пользователя на ресурсе, необходимо было бы сопоставить

user(id:X) -> role(name:Z) -> permissions -> resource(id:Y) -> commands

но в RBAC можно только назначить

user(id:X) -> role(name:Z) -> permissions -> resource(name:"Ledger") -> commands

Затем, чтобы преодолеть это ограничение RBAC, я подумал об именовании ресурсов с их идентификаторами, такими как

user(id:X) -> role(name:Z) -> permissions -> resource(name:"Ledger:39823847") -> commands

Но это кажется неправильным. Я не видел ни одного примера RBAC, использующего имена ресурсов в качестве отображения для реальных экземпляров.

Я использую не тот молот? Я вижу это неправильно? Есть ли какая-то другая модель контроля доступа, более подходящая для этой задачи? Или это путь? Буду признателен, если кто-нибудь укажет мне правильное направление.

Спасибо за помощь

Ответы на вопрос(1)

Ваш ответ на вопрос