9

の動的メニューを作成しようとしていますASP.NET MVC4 web application。メニューを作成しているので、ユーザーがアクセスできないメニュー項目がメニューに表示されないようにしたいと考えています。

特定の役割を必要とする各ページでフォーム認証と[Authorize]属性を使用しています。

2 つの string(Controller and Action)とログインしているユーザーが与えられた場合、ユーザーがそのコントローラー アクションにアクセスできるかどうかをどのように判断できますか?


私のメニューデータはすべてデータベースに保存されています。メニューをレンダリングする私の計画は、メニュー データの JSON オブジェクトを構築し、それをビューに埋め込むことです。次に、クライアント側でメニューを使用してテンプレートに Handlebars.jsプラグインします。JSON object


私がやろうとしているのは、メニュー データをレンダリングしているときに、ユーザーの特定のコントローラー/アクションのアクセス許可を確認することです。私が最初に考えたのは、リフレクションを使用してコントローラーのアクション メソッドを調べ、Authorize 属性の存在を確認し、現在ログインしているユーザーがそのページにアクセスするために必要な役割を持っているかどうかを確認することでした。そうでない場合、メニュー項目はレンダリングされません。

私はいつも使いreflectionたがりませんが、通常はもっと簡単な方法があります。

4

7 に答える 7

0

すべてのメニュー html コードを含むビューがあると仮定すると、おそらく以下を使用する方が良いでしょう:

<ul class="menu">
    <li>
        @Html.ActionLink("Home", "Index", "Home")
    </li>
    @if (System.Web.Security.Roles.IsUserInRole(User.Identity.Name, "Administrator"))
    {
        <li>
            @Html.ActionLink("Statistics", "Index", "Stats")
        </li>
    }
</ul>

お役に立てれば!

于 2014-09-05T14:05:16.790 に答える
0

ActionFilter 属性を使用して、ロールhttp://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4-custom-action-filtersに基づいてユーザーをフィルタリングし ます

于 2013-12-01T09:21:37.817 に答える
0

Rolevalidation というクラスを作成し、以下のコードを追加します。

public class AuthorizeRoles : AuthorizeAttribute
{
    List<string> roles = new List<string>(“your list of roles”);
    bool isAuthenticated = false;
    for (int i = 0; i < roles.Count(); i++)
    {
        if (u.Role.Name == roles[i])
        {
            isAuthenticated = true;
            break;
        }
    }


    if (isAuthenticated)
    {
        SetCachePolicy(filterContext);
    }
    else
    {
        filterContext.Result = new RedirectResult("~/Error");
    }
}

このコードをすべてのコントローラーの先頭に追加します* [AuthorizeRoles(Roles = "SuperAdmin")]

于 2014-02-17T07:41:47.150 に答える
0

リンクは、アクションとコントローラーから来る json オブジェクトによって生成されます。

json オブジェクトには、リンクのリスト (またはメニュー項目を実装するために必要なもの) が必要です。リストは、データベースに保存されている設定の種類によって生成され、各ユーザーにどのリンクを表示するかを伝えます。

それに加えて、ユーザーがURLを持っている場合、この場合は使用する必要があります

https://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute.users(v=vs.118).aspx

于 2014-04-03T10:09:17.447 に答える
-1

Authorize 属性を使用してコントローラーからのアクションを装飾する[Authorize(AuthorizationContext)]か、authorize 属性を拡張してカスタム認証を行うことができます。

また、コントローラーの作成アクションには作成タイプの承認が必要であることを定義するディクショナリーでいくつかの規則を定義することもできます。

Dictionary<string, Right> actionConventions = new Dictionary<string, Right>
    {
        { "Index", Right.View },
        { "List", Right.View },
        { "Open", Right.View },
        { "Create", Right.Create},
        { "Edit", Right.Edit },
        { "Delete", Right.Delete }
}

アクションがディクショナリOnAuthorizationで定義された規則に準拠しているかどうかを確認するかAuthorize、アクションまたは.AuthorizeAttributeAuthorize(AuthorizationContext)HandleUnauthorizedRequest(AuthorizationContext)

メニューを処理すると、現在のユーザーの権利を返し、ユーザーの権利を含むクラスを追加する承認サービスを作成できます。モデルをレンダリングするときに、メニュー項目をレンダリングする必要があるかどうかをモデルをチェックします。

属性 MSDN の承認

于 2013-01-17T15:39:42.660 に答える