どのようにパラメータ値を利用し、コントローラ用のカスタムAuthorizeAttributeを使用するには?
-
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);
}
解決
このような何かがあなたの方法であなたを助けるかもしれません。あなたはそれがむしろハードコードより、各アクションにあなたの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にない場合も、あなたはPOSTデータを見てfilterContext.RequestContext.HttpContext.Request
を使用することができます。
所属していません StackOverflow