Как защитить определенные действия от использования в соответствии с пользовательской таблицей UserRoles, которую я создал


Это базовая структура базы данных для пользователей и ролей пользователей.

Введите описание изображения здесь

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

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

Любые предложения по конкретному MVC3 решение?

1 2

1 ответ:

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

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

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

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

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

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

Edit

Альтернативно, вы можете создать свой собственный attibute авторизации, просто производный от AuthorizeAttribute, и переопределить AuthorizeCore( HttpContextBase httpContext) возвращать true или false, если пользователь находится в роли, разрешенной do do function ' X '