0

私はカスタム属性を作成して、コントローラーのいくつかのメソッドに異なるアクセスレベルが到達するのを防ぐことに慣れています:

[AuthorizeUser(AccessLevel = "Administrator")]
public ActionResult Index()
{
    return View("Index");
}

しかし今、ビューで同じカスタム属性を使用したいと思います。目標は、たとえば管理者の場合に HTML を表示することです。

奇妙に聞こえますが、それについては何も見つかりませんでした。どんな助けでも大歓迎です。

4

2 に答える 2

1

これが正しい方法かどうかはわかりませんが、これでうまくいく可能性があります。

ソリューション1

booleanユーザーが特定のロールに属しているかどうかを確認し、そのモデルに基づいてビューを作成するために、モデルに を含めることができます。

public class MyViewWithCustomAuthentication
{
  ....
  public bool IsAdmin{get;set;}
  ...
}

コントローラーで、ユーザーが特定の役割にあるかどうかを確認できます

public ActionResult Index()
{
    var myView = new MyViewWithCustomAuthentication();
    myview.IsAdmin = false;
    if(User.IsInRole("Admin"))
    {
       myView.IsAdmin = true;
    }

    return View(myView);
}

その後、視野に入る

@model MyViewWithCustomAuthentication
....
@if(Model.IsAdmin == true)
{
  //show HTML
}
else
{
  //hide HTML
}
....

ここには 1 つのビューがありますが、前述のように、ビューモデルに小さな変更を加える必要がある場合があります。

解決策 2

別の方法として、ユーザーが特定のロールに属しているかどうかを確認し、要件に基づいてロールごとに異なるビューを作成することもできます。このようにして、目的の HTML を表示できますが、最終的には異なるビューが表示されます。

public ActionResult Index()
{       
    if(User.IsInRole("Admin"))
    {
       return View("ViewForAdmin")
    }

    return View("ViewForNonAdmin");
}

誰か提案があれば、自由に編集またはコメントしてください。

于 2014-05-27T17:31:08.347 に答える