public void AddUserToRole(Guid userId, string roleName)
{
var userManager = new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(DbContext));
var user = userManager.FindById(userId.ToString());
userManager.AddToRole(user.Id, roleName);
DbContext.SaveChanges();
}
私は上記のような役割にユーザーを追加しようとしています。ただし、次のコントローラーアクションに進むときに動作しないため、動作しません。Asp.net IDでロールにユーザーを追加できません
[AuthorizeUser(Roles = RoleEnums.UserWithProfile)]
public ActionResult Index(Guid? userProfileId)
{
}
これは許可されません。奇妙なことは、データベースシーディングで追加されたユーザーの認証を正常に管理できることです。
private void SeedUserRoles(List<ApplicationUser> applicationUsers, DbContext dbContext)
{
var userStore = new UserStore<ApplicationUser>(dbContext);
var userManager = new UserManager<ApplicationUser>(userStore);
userManager.AddToRole(applicationUsers[0].Id, RoleEnums.UserWithProfile);
userManager.AddToRole(applicationUsers[1].Id, RoleEnums.UserWithProfile);
userManager.AddToRole(applicationUsers[2].Id, RoleEnums.UserWithProfile);
userManager.AddToRole(applicationUsers[3].Id, RoleEnums.User);
}
private void CreateRoles(DbContext context)
{
var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));
if (!roleManager.RoleExists(RoleEnums.Admin))
{
var role = new IdentityRole { Name = RoleEnums.Admin };
roleManager.Create(role);
}
if (!roleManager.RoleExists(RoleEnums.User))
{
var role = new IdentityRole { Name = RoleEnums.User };
roleManager.Create(role);
}
if (!roleManager.RoleExists(RoleEnums.UserWithProfile))
{
var role = new IdentityRole { Name = RoleEnums.UserWithProfile };
roleManager.Create(role);
}
}
私はここで何が欠けていますか?メソッドAddUserToRole()が正しくないのですが、シードのみが正しい動作をしているのはなぜですか?
編集:ASP.NET Identity check user roles is not workingこれが見つかりました。ここに問題があるようです。しかし、私はユーザーが手動でログアウトして再度ログインする必要はありません。彼らはセキュリティスタンプの更新について何か言及していますが、それは私のためにはうまくいかなかったのです。
Edit2:私が解決した解決策については、私の回答を参照してください。
権限エラーが発生した場合は、役割を追加するために適切なユーザーを使用していますか?ロール= RoleEnums.UserWithProfileのユーザーである必要があります。アクションメソッドにauthの制限があるときに、権限付与の制限がないため、dbのシーディングが機能します(フィルターを参照)。 –
私にとって目立つものは、 AddUserToRole()メソッドでは、パラメータとして文字列を使用していますが、シードメソッドはRoleEnumsクラスの静的プロパティを使用しています。 AddUserToRole()を呼び出すときにロールとして使用している文字列がRoleEnums.UserWithProfileと一致しない可能性がありますか? – JuanR