0

シャード ビューの 1 つにこのコードがあります。

<li>
   <a href="@Url.Action("Index","Campaigns")" class="tables"><span>Campaigns</span></a>
</li>

Campaigns Controller には、次のAuthorizeAttributeようなカスタムがあります。

[AuthorizeRoles(Roles = "admin")]
public class CampaignsController : Controller
{
    ...
}

問題は、ユーザーが ではないadmin場合、コントローラーにアクセスできない場合でも、リンクがまだレンダリングされていることです。

カスタム実装を使用しているため、 などの標準的な承認方法は機能し.IsInRoleません。

を使用せずに、ユーザーがアクセスできない場合にリンクが非表示になるように、コントローラーメソッドに属性を適用する方法はあります.IsInRoleか?

4

1 に答える 1

1

Action が条件に基づいてレンダリングされるように、MvcHtmlString を拡張する独自の拡張メソッドを作成できます。

public static MvcHtmlString IfAllowed(this MvcHtmlString action, bool allowed)
{
  return allowed? action:String.Empty;
}

あなたが使用するとき、私はあなたのカスタムがどのように機能するかわかりませんが、カスタムロールなどに基づいてブール値を渡します

<li>
   @Html.ActionLink("Index","Champaigns").IfAllowed(true/false)
</li>
于 2013-04-30T17:41:43.867 に答える