ASP.NET MVC: я могу сказать [Авторизовывают Роли = “Администраторы”] на Классе контроллера, но имеют одно общедоступное действие?

Я начался с помощью проекта по умолчанию AccountController, но я расширился/изменил его до неузнаваемости. Однако вместе с оригиналом у меня есть a LogOn и LogOff действие.

Очевидно, LogOn действие должно быть доступно для всех. Однако, так как я добавил много других действий к этому контроллеру (чтобы создать и отредактировать пользователей), я хочу, чтобы 99% действий потребовали членства в роли администратора.

Я мог украсить все свои действия [Authorize Roles="Administrators"] но существует риск, я забуду тот. Я заставил бы его защитить по умолчанию путем украшения самого класса контроллера тем атрибутом, и затем ослабить требование к моему LogOn метод. Я могу сделать это?

(Как в, может я делать это out-of-the-box, не создавая пользовательские классы, и т.д. Я не хочу усложнять более, чем необходимые вещи.)

5
задан Gary McGill 29 March 2010 в 10:52
поделиться

2 ответа

Чтобы переопределить атрибут контроллера на уровне действия, вы должны создать настраиваемый атрибут, а затем установить для свойства Order своего настраиваемого атрибута более высокое значение, чем AuthorizeAttribute контроллера. Я считаю, что оба атрибута все еще выполняются, если ваш настраиваемый атрибут не генерирует результат с немедленным эффектом, такой как перенаправление.

См. Переопределение атрибута AuthorizeAttribute только для одного действия для получения дополнительной информации.

Я считаю, что в вашем случае вам просто нужно будет добавить AuthorizeAttribute в Действия, а не на уровне контроллера. Однако вы можете создать модульный тест, чтобы убедиться, что все действия (кроме LogOn) имеют AuthorizeAttribute

4
ответ дан 14 December 2019 в 04:34
поделиться

Вы можете использовать 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(); 

}
}
2
ответ дан 14 December 2019 в 04:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: