В настоящее время мы проектируем a Система ролей и разрешений пользователей в нашем веб-приложении (ASP.NET), и, похоже, у нас есть несколько случаев , которые не подходит в рамках классического управления доступом на основе ролей (RBAC) . Я опубликую несколько вопросов, каждый из которых посвящен конкретному делу. Это мой второй вопрос (первый вопрос здесь: Система ролей и разрешений, не связанных с RBAC: проверка города пользователя ).
У нас есть следующий случай: нам нужно реализовать роль менеджера в нашем веб-приложении. Однако менеджер может принадлежать одной или нескольким компаниям (в рамках большой группы компаний, для которой мы создаем это веб-приложение). Скажем, может быть «Менеджер компаний А и Б», «Менеджер компании С» и т. Д.
В зависимости от компаний, к которым принадлежит Управляющий, он имеет доступ к определенным операциям: например, он может общаться с клиентами только тех компаний, к которым он принадлежит. То есть «менеджер компаний A и B» может иметь контакты только с клиентами компаний A и B, но не с клиентами компании C. Он также может просматривать страницы с подробной информацией клиентов компаний A и B, но не C и т. Д. .
Похоже, что это дело относится к RBAC. Однако это не совсем так. Нам нужно будет создать класс ManagerRole , который будет иметь свойство Companies - то есть это будет не просто роль в качестве набора разрешений (как в классическом RBAC), но роль со свойствами !
Это был только один пример роли, обладающей свойствами. Существуют и другие: например, роль администратора , которая также будет принадлежать ряду компаний, а также будет иметь другие настраиваемые свойства.
Это означает, что у нас будет иерархия или роли классов:
class Role – base class
class ManagerRole : Role
List Companies
class AdministratorRole : Role
List Companies
Other properties
Мы исследовали чистый RBAC и его реализацию в нескольких системах, и не обнаружил систем с иерархией или ролями , каждая из которых имеет собственные свойства. В RBAC роли - это просто наборы разрешений.
Мы могли бы моделировать наши дела, используя разрешение со свойствами , такими как ManagerPermission, AdministratorPermission, но у этого есть много недостатков, главным из которых является то, что мы не сможем назначить роль типа «Менеджер компаний» A и B ”непосредственно для пользователя, но ему придется создать роль, содержащую ManagerPermission для компаний A и B… Более того,« Менеджер », скорее, скорее« роль »(должность в компании), чем« разрешение » с лингвистической точки зрения.
Буду признателен за любые идеи на эту тему, а также за любой опыт в этой области!
Спасибо.