2

Authorize 属性は、Action に基づいて何らかのアクセス制御を行うのに適していますが、レイアウトに UI 要素があり、ユーザーが許可されていない限り出力されることに注意してください。

ViewBag にブール値を設定することもできますが、それは良い解決策ではないと思います。

Layout.cshtml のどこかに:

@if (ViewBag.IsAuthorized)
{
     <li>@Html.ActionLink("Index", "Admin")</li>
}

より良い解決策があれば教えてください。ありがとう。

4

3 に答える 3

3

WebPageRenderingBase.Userオブジェクトを使用します。以前にユーザーを HttpContext またはコントローラーに設定したと仮定します (実際にそうする必要があります)。あなたがAuthorize属性を使用しているので、私は-があるに違いないと考えていますUser。うまくいけば、次のように動作するはずです。

これUserは、Razor で非常に簡単にアクセスできます。

@User.Identity.Name

現在のユーザー名を出力します。したがって、ifユーザーが認証されている場合にのみ実行されるブロックは次のようになります。

@if(User.Identity.IsAuthenticated)
{
   Hello
}

"Hello"ユーザーが認証されているかどうかを出力します。

IsAuthenticatedオブジェクトにチェックを入れることができることを思い出させてくれた以下のジェームズに感謝しUserます-最初は見つけられませんでしたが、それが上にあることを思い出しましたIdentity!

于 2012-07-03T09:06:23.677 に答える
0

helper methodを作成し、レイアウトから呼び出すことができます。

@Helper.IsAuthorize()
于 2012-07-03T09:04:45.120 に答える
0

ユーザーが認証されているかどうかを確認する関数を呼び出すことができます。

ヘルパー:

public bool checkUser(string user)
{
//User is allowed?
return true/false;
}

レイアウト:

@if (checkUser(User.Identity.Name)
{
     <li>@Html.ActionLink("Index", "Admin")</li>
}
于 2012-07-03T09:06:00.770 に答える