どのようにパラメータ値を利用し、コントローラ用のカスタムAuthorizeAttributeを使用するには?

StackOverflow https://stackoverflow.com/questions/2822608

質問

私は、彼らがへのアクセスを持っていないというエンティティへのアクセスからユーザーを防ぐために、コントローラのアクションを確保しようとしています。私は、次のコードでこれを行うことができています。

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を使用することができます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top