2017-01-02 84 views
1
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身份無法將用戶添加到角色

[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發現這個,它似乎是這裏的問題。但我不希望用戶必須手動註銷並重新登錄。他們提到了更新安全印章的事情,但這對我並不適用。

編輯2:查看我發佈的解決方案,我結束了。

+0

如果您收到授權錯誤,您確定您使用正確的用戶來添加角色嗎?它應該是角色= RoleEnums.UserWithProfile的用戶.db的種子工作,因爲它沒有授權限制,而行動方法有身份驗證限制(請參閱過濾器) –

+0

某些突出的是我在AddUserToRole()方法,您使用字符串作爲參數,而種子方法使用類RoleEnums的靜態屬性。當您調用AddUserToRole()與RoleEnums.UserWithProfile不匹配時,是否有可能將您用作角色的字符串? – JuanR

回答

0

AddToRole返回一個IdentityResult。您需要在Errors集合的字符串中檢查此返回值的錯誤。

https://msdn.microsoft.com/en-us/library/dn497483(v=vs.108).aspx

您也應該檢查FindById的回報,你實際上得到了用戶。

+0

我發現這[鏈接](http://stackoverflow.com/questions/20132795/asp-net-identity-check-user-roles-is-not-working)它似乎你需要註銷並登錄更新角色。我試過更新securitystamp提示,但它沒有任何建議? –

相關問題