Как защитить определенные действия от использования в соответствии с пользовательской таблицей UserRoles, которую я создал - PullRequest
2 голосов
/ 19 января 2012

Это базовая структура базы данных для Users и UserRoles.

enter image description here

Мой клиент хочет иметь возможность посмотреть на роль и поставить галочку в некоторых полях:х, у и г ".X, Y и Z - некоторые действия в приложении.

Это не новая идея, и я уверен, что для этой ситуации есть проверенный шаблон.Подобно тому, что делает Wordpress, он выбирает функции, которые может выполнять роль Foo, и пользователь принадлежит этой роли.

Есть предложения по конкретному решению MVC3?

1 Ответ

2 голосов
/ 19 января 2012

Встроенный атрибут [Authorize] позволяет ограничивать определенные действия, которые могут выполняться только определенными ролями.

Для того, что вы пытаетесь, я бы посоветовал рассматривать «Функции X, Y и Z» как роли, а то, что у вас сейчас есть, как роли, как «группы пользователей» или что-то в этом роде. Таким образом, ваш клиент сможет назначать разные «Группы пользователей» доступ к определенным «ролям».

Таким образом, вы можете использовать встроенные элементы членства / роли / авторизации. все, что вам нужно сделать, это реализовать свои собственные MembershipProvider и RoleProvider.

Ваша реализация поставщиков ролей string[] GetRolesForUser(string username) должна выполнить поиск в базе данных, чтобы увидеть, в каких «группах пользователей» они находятся и, следовательно, к каким «ролям» они имеют доступ.

Если вы сделаете это, вы можете легко ограничить доступ к различным функциям с помощью атрибута [Authorize] и использовать стандартный членский состав для обработки процесса входа в систему.

Если ваш клиент настаивает на том, чтобы называть их «Роли» и «Функции», а не «Группы пользователей» и «Роли» - вам не нужно говорить ему, что это не совсем то, как вы это реализовали:)

Редактировать

В качестве альтернативы, вы можете создать собственную аттестацию авторизации, просто наследовать от AuthorizeAttribute и переопределять AuthorizeCore( HttpContextBase httpContext), возвращая true или false, если пользователю разрешена роль, делайте функцию 'X'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...