1

ログインしたユーザー ロールに基づいて、メニュー バーを表示および非表示にしようとしていました。だから私はカミソリビューでコードを書いた

   @if ( Request.IsAuthenticated && HttpContext.Current.User.IsInRole( "Admin" ) ) {
                 <li>Projects link</li>
                 <li>Profile link</li>
            }

そしてこれも

 @if (Roles.IsUserInRole( "Admin" ) ) {
                 <li>Projects link</li>
                 <li>Profile link</li>
            }

両方のコードを試しましたが、動作しますが、問題はすべての管理者に対して機能していないことです。合計 4 人のユーザーが管理者の役割を持っている場合、1 人の管理者に対してのみ機能します。

また、別のユーザーロールの財務管理者を単一のユーザーに対して機能することを宣言するときも同じです!

他のすべてのユーザーはメニューをブロックしますが、ユーザーの役割は 4 人のユーザーで同じです。3人も同じ役割を維持しているときに、管理者として1人のユーザーのみを取得する方法がわかりません。メソッドがデータベースからロールを取得する場所と、それがどのように機能するかを説明できる人はいますか?

4

2 に答える 2

0

データベース内のテーブルを確認してください。webpages_UsersInRolesこれは、どのロールがどのユーザー プロファイルに関連付けられているかを管理するものです。

おそらく、ユーザーの作成時に割り当てられる役割にも問題があります。アカウントコントローラーで登録方法を確認してください。次のような行が必要です。

Roles.AddUserToRole(model.UserName, model.userRole);

そうしないと、ユーザーの作成時に役割が割り当てられない場合があります。

于 2013-02-19T09:59:57.453 に答える
0

IsInRole メソッド (および他のすべてのメソッド) は、データベース内のストアド プロシージャです。データベースには、MemberShip テーブルがあります。ストアド プロシージャは、これらのテーブルで機能します。管理者ロールが接続されている 1 人のユーザーに対してコードが機能すると言う場合、最初に確認することは、コードが機能しない他のユーザーが実際にそのロールを持っているかどうかです。データベース内のすべてのユーザーとロールの接続については、テーブルを確認してください。

于 2013-02-19T08:17:47.787 に答える