2

私の人生の中で、MVC 5アプリケーションに役割を追加する方法を理解できません。これは持っているIDと名前(「管理者」、「ユーザー」、等...) AspNetUsersを、持っている4.ASP.NETでの役割の使用MVC 5 Identity 2.0

テーブルは箱の外にあるMVCでこのような風、 AspNetRoles、でしたIdおよびその他のユーザーフィールド AspNetUserRoles - このテーブルには、上記のテーブルにマッピングされているUserIdとRoleIdがあります。

ログインしているユーザーが「管理者」の役割または「ユーザー」の役割を持っているかどうかを確認できます。

if (User.IsInRole("Admin")) 
{ 
//do something 
} 

値は常にfalse戻ってくる:ここ

は、私がしようとしているものです。

私も試してみました:

var UserManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(context)); 
var userRole = UserManager.GetRoles(user.GetUserId()); 
if (userRole[0] == "Admin") 
    { 
    // do something 
    } 

これは、エラーがスローされます。

「インデックスが範囲外でした負でないコレクションのサイズ 未満でなければなりません。」

現在ログインしているユーザーの役割を取得する簡単な方法はありますか?私はRole Managerを使用することに言及していますが、私はそれを動作させることができませんでした。私は感謝

+0

ユーザーがログインしていますか?私は、UserManagerを使用して以下の項目をチェックします:http://stackoverflow.com/questions/23049813/asp-net-identity-2-0-check-if-current-user-is-in-role-isinrole –

答えて

3

エラーがuserRoleが空であることを語っているが、0のさえ指標として、「コレクションのサイズよりも小さい」ではないアイデンティティ1.0

のためだったと信じています。つまり、問題のユーザーはどのロールにも属していません。

これについての方法論はこれまでのそれほど大きな違いはありません。役割はまず存在しなければならず、ユーザーはその役割に関連付けられている必要があります。その結果、最初のステップは、あなたの役割を移入することです:

db.Roles.Add(new Role { Name = "Admin" }); 

あなたはこのためにRoleManagerを使用することができますが、私はあなただけで直接コンテキストを利用することができたときにそれはやり過ぎであることがわかりました。その後

UserManager.AddToRole(userId, "Admin"); 

文字通りこれだけです。あなたが好きなら、のSeedを無効にして、一部のユーザー/ロールを自動的にデータベースに組み込むことができます。役割については、それはちょうどのようになります:

context.Roles.AddOrUpdate(
    r => r.Name, 
    new Role { Name = "Admin" }, 
    ... 
); 
+0

はい、これを見ました。私は空のテーブルを持っていた。私の質問はあなたの役割をどうやってチェックしたのですか? ありがとう –

+0

qq:ローカルのsqlserverをlocaldbと仮定し、IDデータベースを開くと、データが存在することがわかりますか?問題が発生しましたか?はい、ありますか(User.IsInRole( "Admin")私はユーザーを作成してデータベースをシードしようとしていましたが、常にエラーが発生していたIdentityResultをチェックしていないため、データベースが簡単でした。 – Bill