То, что вам нужно будет сделать, это чтобы роли ваших пользователей (полномочия) исходили из базы данных. Как только это так, вы можете легко настроить роли, которые пользователь (или набор пользователей) играет, и создавать / удалять их на лету. Документы содержат довольно хорошую информацию о том, как получить роли из базы данных, поэтому я не буду больше вдаваться в подробности.
Однако, как только динамические роли будут созданы, вам все равно нужно будет иметь возможность подключать роли к создаваемым объектам. По сути, есть два способа сделать это:
- Списки контроля доступа
- Пользовательская логика
В зависимости от требуемой степени детализации и требуемой гибкости один вариант может быть более привлекательным, чем другой.
Списки контроля доступа, по сути, позволяют вам отображать разрешения между каждым пользователем и каждым экземпляром объекта. Как вы можете себе представить, это довольно трудоемко и может плохо работать, если у вас большое количество сущностей и пользователей.
Создание собственной логики, с другой стороны, гораздо более гибко, поскольку вы можете настроить свою собственную схему для соединения экземпляров сущностей или классов сущностей с пользователями и их ролями.