Как использовать Custom AuthorizeAttribute для контроллера, использующего значение параметра?
Я пытаюсь обезопасить действие контроллера, чтобы предотвратить доступ пользователя к сущности, к которой у него нет доступа. Я могу сделать это с помощью следующего кода.
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);
}
1 ответ
Нечто подобное может помочь вам на вашем пути. Хотя вы можете захотеть добавить некоторые дополнительные свойства к своему атрибуту, чтобы вы могли указывать свой параметр entityCode для каждого действия, а не жестко его кодировать.
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
нет в вашем RouteData, вы можете использовать filterContext.RequestContext.HttpContext.Request
смотреть на данные POST.