Встроенный атрибут [Authorize]
позволяет ограничивать определенные действия, которые могут выполняться только определенными ролями.
Для того, что вы пытаетесь, я бы посоветовал рассматривать «Функции X, Y и Z» как роли, а то, что у вас сейчас есть, как роли, как «группы пользователей» или что-то в этом роде. Таким образом, ваш клиент сможет назначать разные «Группы пользователей» доступ к определенным «ролям».
Таким образом, вы можете использовать встроенные элементы членства / роли / авторизации. все, что вам нужно сделать, это реализовать свои собственные MembershipProvider и RoleProvider.
Ваша реализация поставщиков ролей string[] GetRolesForUser(string username)
должна выполнить поиск в базе данных, чтобы увидеть, в каких «группах пользователей» они находятся и, следовательно, к каким «ролям» они имеют доступ.
Если вы сделаете это, вы можете легко ограничить доступ к различным функциям с помощью атрибута [Authorize]
и использовать стандартный членский состав для обработки процесса входа в систему.
Если ваш клиент настаивает на том, чтобы называть их «Роли» и «Функции», а не «Группы пользователей» и «Роли» - вам не нужно говорить ему, что это не совсем то, как вы это реализовали:)
Редактировать
В качестве альтернативы, вы можете создать собственную аттестацию авторизации, просто наследовать от AuthorizeAttribute
и переопределять AuthorizeCore( HttpContextBase httpContext)
, возвращая true или false, если пользователю разрешена роль, делайте функцию 'X'