Контроллеры в Umbraco
В Umbraco имеется несколько видов контроллеров, которые выполняют разные задачи.
Render MVC Controllers
Имеются контроллеры, которые выполняются при отображении контента во время обработки запроса Umbraco.
Это контроллеры типа
Umbraco.Web.MVC.RenderMvcController.Surface Controllers
SurfaceController это MVC контроллер, который взаимодействует с front-end отображением UmbracoPage. Они могут быть использованы для отображения MVC Child Actions и для обработки данных формы. SurfaceControllers автомтически маршрутизируются, т.е. не нужно добавлять или создавать собственные маршруты для этих контроллеров.
Все SurfaceControllers наследуются от базового класса
Umbraco.Web.Mvc.SurfaceController.Umbraco Api Controllers
Umbraco API Controller это ASP.Net WebApi контроллер для создания REST сервисов. Эти контроллеры тоже автомтически маршрутизируются, т.е. не нужно добавлять или создавать собственные маршруты для них.
Все SurfaceControllers наследуются от базовго класса
Umbraco.Web.WebApi.UmbracoApiController.Umbraco Authorized Controllers и атрибуты
Контроллеры Umbraco Authorized используются, когда нужно получить данные аутентификации (authN) или авторизации пользователя (authZ). Если authN или authZ будет неуспешной, контроллер вернет "401 - unathorized response."
Авторизация в бэк-офисе
В Umbraco используются следующих контроллеры и атрибуты для авторизации пользователей бэк-офиса:
MVC
Любые MVC контроллеры и действия, для которых установлен атрибут
Umbraco.Web.Mvc.UmbracoAuthorizeAttribute будут требовать авторизации запроса для пользователей бэк-офиса. Имеется базовый класс контроллера с установленным атрибутом: Umbraco.Web.Mvc.UmbracoAuthorizedController. Эти контроллеры не маршрутизируются автоматически. Более подробная информация представлена в следующих разделах.WebApi
Любые WebApi контроллеры и действия, для которых установлен атрибут
Umbraco.Web.WebApi.UmbracoAuthorizeAttribute будут требовать авторизации запроса для пользователей бэк-офиса.
Имеется базовый класс контроллера с установленным атрибутом:
Umbraco.Web.WebApi.UmbracoAuthorizedApiController. Так как этот контроллер наследуется от Umbraco.Web.WebApi.UmbracoApiController, он автоматически маршрутизируется. Он также имеет аттрибут Umbraco.Web.WebApi.IsBackOfficeAttribute для того, чтобы была правильно настроена маршрутизация при авторизации пользователей бэк-офиса.
Существует другая реализация базовго класса для бэк-офиса, это
Umbraco.Web.Editors.UmbracoAuthorizedJsonController, который наследуется от Umbraco.Web.WebApi.UmbracoAuthorizedApiController, но он имеет несколько специальных фильтров для автоматической обработки anti-forgery tokens для использования с AngularJS в бэк-офисе.Авторизация пользователей и администраторов
Авторизация контроллера для пользователей выполняется с помощью атрибутов:
Umbraco.Web.Mvc.MemberAuthorizeAttribute- для MVC контроллеровUmbraco.Web.WebApi.MemberAuthorizeAttribute- для WebApi контроллеров
Можно устанавливать данные атрибуты для контроллеров и действия для того, чтобы гарантировать, что пользователь должны быть авторизван для получения доступа к ресурсу. Например:
[MemberAuthorize]
public class AccountController : SurfaceController
{
[HttpPost]
public ActionResult UpdateAccountInfo(AccountInfo accountInfo)
{
//TODO: Обновить данные аккаунта для текущего пользователя
}
}
Существует несколько свойств для атрибута, которые позволяют более широко настраивать авторизацию пользователей:
AllowType- Список типов пользователей через запятуюAllowGroup- Список групп пользователей через запятую