Как защитить определенные действия от использования в соответствии с пользовательской таблицей UserRoles, которую я создал
Это базовая структура базы данных для пользователей и ролей пользователей.
Мой клиент хочет иметь возможность посмотреть на роль и поставить галочки в некоторых полях: "эта роль может делать x, y и z". X, Y и Z - это некоторые действия в приложении.
Это не новая идея, и я уверен, что есть проверенная модель для этой ситуации. Подобно тому, что делает Wordpress, он выбирает функции, которые может выполнять роль Foo, и пользователь принадлежит к этой роли.
Любые предложения по конкретному MVC3 решение?
1 ответ:
Встроенный атрибут
[Authorize]
позволяет ограничить определенные действия, которые могут выполняться только определенными ролями.Для того, что вы пытаетесь сделать,я бы предложил рассматривать "функции X, Y и Z" Как роли, а то, что у вас сейчас есть, как роли "групп пользователей" или что-то в этом роде. Таким образом, ваш клиент сможет назначить различным "группам пользователей" доступ к определенным "ролям".
Таким образом, вы можете использовать встроенные функции членства / роли / авторизации. все, что ты хочешь нужно было сделать это внедрить свой собственный MembershipProvider и RoleProvider.
Ваша реализация поставщиков ролей
string[] GetRolesForUser(string username)
должна была бы выполнить поиск базы данных, чтобы увидеть, в какой "группе(группах) пользователей" они находятся и, следовательно, к какой "роли(ролям)" они имеют доступ.Если вы сделаете это, вы можете легко ограничить доступ к различным функциям с помощью атрибута
[Authorize]
и использовать стандартный набор членства для обработки процесса входа в систему.Если ваш клиент настаивает на том, чтобы называть их "ролями" и "Функции", а не "Группы пользователей" и "роли" - вам не нужно говорить ему, что это не совсем так, как вы это реализовали:)
Edit
Альтернативно, вы можете создать свой собственный attibute авторизации, просто производный от
AuthorizeAttribute
, и переопределитьAuthorizeCore( HttpContextBase httpContext)
возвращать true или false, если пользователь находится в роли, разрешенной do do function ' X '