Как использовать пользовательский авторизеаэстерибут для контроллера, использующего значение параметра?
-
26-09-2019 - |
Вопрос
Я пытаюсь закрепить действия контроллера, чтобы предотвратить доступ пользователя доступа к объекту, к которому они не имеют доступа. Я могу сделать это со следующим кодом.
public ActionResult Entity(string entityCode)
{
if (CurrentUser.VerifyEntityPermission(entityCode))
{
//populate viewModel...
return View(viewModel);
}
return RedirectToAction("NoAccessToEntity", "Error");
}
Я хотел бы иметь возможность добавить атрибут для самого действия контроллера. Чтобы подтвердить доступ к объекту, мне необходимо увидеть, какое значение было передано контроллеру и какие объекты пользователь имеет доступ. Это возможно?
[EntityAuthRequired]
public ActionResult Entity(string entityCode)
{
//populate viewModel...
return View(viewModel);
}
Решение
Что-то вроде этого может помочь вам на вашем пути. Хотя вы можете добавить некоторые дополнительные свойства в свой атрибут, чтобы позволить вам указать параметр EntiteCode на каждое действие, а не жесткий код.
public class EntityAuthRequired : FilterAttribute, IAuthorizationFilter
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
//Make sure that this is not NULL before assigning value as string...
var entityCode = filterContext.RouteData.Values["entityCode"] as string;
// do your logic...
if (!allowed)
filterContext.Result = new HttpUnauthorizedResult();
}
}
Также, если entityCode
не в ваших маршрутах, вы можете использовать filterContext.RequestContext.HttpContext.Request
посмотреть на почтовые данные.