2015-05-29 23 views
2

@Roles.GetRolesForUser()在剃刀布局視圖中沒有返回角色。 @Roles.GetRolesForUser().Count()爲0.Roles.GetRolesForUser()在佈局視圖中沒有返回角色

雖然@Roles.IsUserInRole('name_of_logged_in_role')在同一視圖中返回true在相同的地方。

Razor視圖:

<p> 
    @User.Identity.Name //Output: MyName 
    @Roles.GetRolesForUser().Count() //Output: 0 
    @Roles.IsUserInRole("Radiologist") //Output: True 
</p> 

更新

@Roles.GetRolesForUser(User.Identity.Name).Length //Output: 0 
@Roles.GetRolesForUser(User.Identity.GetUserName()).Length //Output: 0 
+0

你改變之前,這種佈局的作用正在執行?如果是這樣,您可能會遇到與用於GetRolesForUser的Cookie角色緩存有關的問題。請參閱CacheRolesInCookie部分:https://msdn.microsoft.com/en-us/library/8ak75t41(v=vs.110).aspx –

+0

如果您這樣做了'GetRolesForUser(username here )'? – imGreg

+0

@ stephen.vakil不,我不改變角色。即使我做了私人窗口,也保持同樣的狀態。 – SMUsamaShah

回答

6

廣泛的研究之後,我終於發現了問題。我能夠在Web應用程序中重現此問題。顯然,你不能合併ASP.NET身份簡單成員,就像你用GetRolesForUser方法做的那樣。 Roles對象默認設置爲簡單成員身份使用默認提供程序,但它看起來像您使用的ASP.NET身份不是簡單成員資格。直到我想知道自己爲什麼它不工作時,我甚至沒有注意到這種差異。

之所以得到string[0]是因爲GetRolesForUser對數據庫中不存在的表執行了sql查詢。
爲什麼IsUserInRole工作的原因是或多或少它甚至不使用默認的供應商,以檢查它使用的​​

If CacheRolesInCookie is true, then roleName may be checked against the roles cache rather than the specified role provider. 

所以,從技術上說去,是由默認的提供上市,並返回string[0]一個的connectionString因爲你使用connectionString在數據庫中沒有數據。將您的當前數據庫的供應商將沒有幫助,因爲簡單會員數據庫架構是從ASP.NET身份

話雖這麼說不同,你應該得到的角色由用戶名是這樣的:

簡單解決方案:

public List<string> GetRoles(string UserName) 
{ List<string> roles = new List<string>(); 
    if (!string.IsNullOrWhiteSpace(UserName)) 
    { 
     ApplicationUser user = context.Users.Where(u => u.UserName.Equals(UserName, StringComparison.CurrentCultureIgnoreCase)).FirstOrDefault(); 
     var account = new AccountController(); 

     roles = account.UserManager.GetRoles(user.Id);   
    }    
    return roles; 
} 

更新

Ë xtended解決方案:

你可以在你的情況下延長ASP.NET身份角色

http://www.codeproject.com/Articles/799571/ASP-NET-MVC-Extending-ASP-NET-Identity-Roles

+0

我已經在我的應用程序中使用了Identity Roles。我不知道GetRolesForUser屬於簡單的成員資格。我仍然無法在佈局視圖中獲得角色 – SMUsamaShah

+0

這就是我如何獲得角色名稱http://stackoverflow.com/a/29011136/342095 – SMUsamaShah

+0

@ LifeH2O,當您使用其他帖子中的代碼或者讓您已經解決了你的問題? – imGreg