У меня есть область Admin, и я хочу только, чтобы Администраторы ввели область. Я рассмотрел добавление Авторизованного атрибута к каждому контроллеру в области Admin. Нет ли изящное решение или эта функция не там в самой платформе?
Править: Я сожалею, я должен для упоминания этого прежде. Я использую пользовательский AuthorizedAttribute, полученный из AuthorizeAttribute.
Безопасность на основе Web.config почти никогда не должна использоваться в приложении MVC. Причина этого в том, что несколько URL-адресов потенциально могут попасть в контроллер, и установка этих проверок в Web.config неизменно что-то упускает. Помните - контроллеры не связаны с областями, маршруты связаны с областями. Фабрика контроллеров MVC с радостью обслуживает контроллеры из папки Areas / для запросов, не относящихся к области, если нет конфликта.
Например, используя структуру проекта по умолчанию, добавив область администратора с AdminDefaultController, вы можете задействовать этот контроллер через / Admin / AdminDefault / Index и / AdminDefault / Index.
Единственное поддерживаемое решение - поместить ваш атрибут в базовый класс контроллера и гарантировать, что каждый контроллер в пределах области подклассы этого базового класса.
Если весь ваш код администратора находится в одном контроллере, добавьте авторизацию весь класс.
[Authorize]
public class AdminController : Controller
{
.......
}
.. очень грубо, я думаю, вам нужно что-то вроде этого?
Быстрое и грязное управление ролями
[Authorize(Roles = "Admins")]
public ActionResult Register()
{
ViewData["roleName"] = new SelectList(Roles.GetAllRoles(), "roleName");
ViewData["PasswordLength"] = MembershipService.MinPasswordLength;
return View();
}