Я не думаю, что вы можете сделать это со стандартным атрибутом Authorize, но вы можете получить свой собственный атрибут из AuthorizeAttribute, который принимает список разрешенных действий и разрешает доступ только к этим действиям. Вы можете посмотреть на источник для AuthorizeAttribute на www.codeplex.com для идей о том, как это сделать. Если вы это сделали, это может выглядеть так:
[AdminAuthorize (Roles = "Administrator", Exempt = "Login, Logout") ]
public class AdminController : Controller
{
public ActionResult Login()
{
return View();
}
public ActionResult Login()
{
return View();
}
... other, restricted actions ...
}
РЕДАКТИРОВАТЬ : К вашему сведению, в итоге я столкнулся с необходимостью сделать что-то подобное самостоятельно и пошел в другом направлении. Я создал поставщика фильтра авторизации по умолчанию и применил глобальный фильтр авторизации. Поставщик фильтра авторизации использует отражение, чтобы проверить, применяется ли к действию или контроллеру определенный атрибут авторизации, и, если это так, откладывает его. В противном случае применяется фильтр авторизации по умолчанию. Это связано с PublicAttribute, полученным из AuthorizeAttribute, который разрешает публичный доступ. Теперь я получаю защищенный доступ по умолчанию, но могу предоставить публичный доступ через [Public]
, примененный к действию или контроллеру. При необходимости также может применяться более конкретное разрешение. См. Мой блог на http://farm -fresh-code.blogspot.com / 2011/04 / default-authorization-filter-provider.html