Лучший способ реализовать RBAC с Access

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

Users (ID,Login, password,..)
Roles(ID,Rolename)
User_Roles(User_ID, Role_ID)
Permissions(ID,PermissionName)
Permission_Roles(Permission_ID, Role_ID)

Моя идея состояла в том, чтобы создать функцию, которая позволяет проверить, есть ли у пользователя определенное разрешение на доступ к форме. Я бы сделал это, создав разрешения/правила, такие как «canReadFormX», «canEditFormX», которые позволили бы мне использовать одну основную функцию для проверки и выполнения этих конкретных правил и функцию для каждой формы для ее вызова.

Это путь (вернее, я все правильно понял в отношении RBAC) или это слишком сложно? Любой совет очень ценится!


person Christian    schedule 31.01.2012    source источник


Ответы (1)


Мне это кажется справедливым и похожим на то, что мы уже установили для первых 3-х столов.

Затем вам нужно решить проблему «действия», то есть распределить разрешения на использование действий вашего приложения. Я не уверен, что ваше предложение «Разрешения» будет охватывать все ситуации, поскольку вам приходится иметь дело с двумя основными категориями действий:

  1. Действия «Открыть форму», которые вы уже определили: вам фактически необходимо определить 2 уровня авторизации для каждой формы: право «просмотр» и право «обновление».
  2. Все другие действия, такие как специальные кнопки или меню формы, которые позволяют выполнять определенные действия, отличные от простого открытия формы (выполнить отчет, выполнить определенный расчет, автоматически импортировать или обновить данные и т. д.).

Одно решение/мой совет - поддерживать для этого 2 таблицы:

  • Таблица «Формы»
  • Таблица «Действия»

И соответствующие таблицы ссылок:

  • Таблица Form_Role
  • Таблица «Action_Role»

С такой конфигурацией вы полностью защищены. Вы даже можете решить, какая роль имеет право просматривать конкретный отчет в конкретной форме, если доступ к соответствующему действию осуществляется через определенный элемент управления или меню в форме.

Обе таблицы Forms и Actions очень интересны, поскольку они оба участвуют в метамодели вашего приложения...

РЕДАКТИРОВАТЬ: Кстати, если вы находитесь в домене, вы можете использовать учетные данные домена пользователя для управления его правами доступа к вашей системе. В этом случае вам не нужно хранить пароль в вашей системе RBAC.

person Philippe Grondier    schedule 31.01.2012
comment
Я очень ценю ваш подробный ответ. Мы еще не уверены, насколько безопасным хочет приложение наш клиент (имхо, простого подхода с разрешениями было бы достаточно на данный момент и в будущем), но для дальнейших проектов это действительно хорошая идея. Наш клиент также работает в домене, так что это тоже может быть неплохо, но я не совсем уверен, нужно ли это. Но снова отличная идея, которую я просто не осознавал раньше. Тай! - person Christian; 01.02.2012