Я начался с помощью проекта по умолчанию AccountController
, но я расширился/изменил его до неузнаваемости. Однако вместе с оригиналом у меня есть a LogOn
и LogOff
действие.
Очевидно, LogOn
действие должно быть доступно для всех. Однако, так как я добавил много других действий к этому контроллеру (чтобы создать и отредактировать пользователей), я хочу, чтобы 99% действий потребовали членства в роли администратора.
Я мог украсить все свои действия [Authorize Roles="Administrators"]
но существует риск, я забуду тот. Я заставил бы его защитить по умолчанию путем украшения самого класса контроллера тем атрибутом, и затем ослабить требование к моему LogOn
метод. Я могу сделать это?
(Как в, может я делать это out-of-the-box, не создавая пользовательские классы, и т.д. Я не хочу усложнять более, чем необходимые вещи.)
Чтобы переопределить атрибут контроллера на уровне действия, вы должны создать настраиваемый атрибут, а затем установить для свойства Order своего настраиваемого атрибута более высокое значение, чем AuthorizeAttribute контроллера. Я считаю, что оба атрибута все еще выполняются, если ваш настраиваемый атрибут не генерирует результат с немедленным эффектом, такой как перенаправление.
См. Переопределение атрибута AuthorizeAttribute только для одного действия для получения дополнительной информации.
Я считаю, что в вашем случае вам просто нужно будет добавить AuthorizeAttribute в Действия, а не на уровне контроллера. Однако вы можете создать модульный тест, чтобы убедиться, что все действия (кроме LogOn) имеют AuthorizeAttribute
Вы можете использовать AuthorizeAttribute в своем классе
http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.aspx
Для расслабления вы можете реализовать, например, собственный такой атрибут фильтра действий (я не проверял, работает ли он).
public class GetRidOfAutorizationAttribute : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
// you can for example do nothing
filterContext.Result = new EmptyResult();
}
}