2012-05-31 17 views
0

我有這段代碼,但我不知道爲什麼這個工作不正常。我創建了一個自定義角色提供者。IsUserInRole不能在CSHTML中工作

@if (Roles.IsUserInRole(User.Identity.Name, "Manager")) 
{ 
    <li>@Html.ActionLink("User Management", "Index", "User")</li> 
} 

這是自定義代碼,其餘未修改。

public override bool IsUserInRole(string username, string roleName) 
    {  
     UserRoleType usrt = (from usr in db.Users 
        join usrRole in db.UserRoles on usr.UserID equals usrRole.UserID 
        where usr.Email == username 
        select usrRole.UserRoleType).FirstOrDefault(); 

     if (roleName.Split(',').Contains(usrt.UserRoleTypeName)) 
      return true; 

     return false; 
    } 

這樣確實可以當我這樣做:

UserRoleProvider roleProvider = System.Web.Security.Roles.Provider as UserRoleProvider; 

if (roleProvider.IsUserInRole(httpContext.User.Identity.Name, Roles) || String.IsNullOrEmpty(Roles)) 
      return true; 

編輯:

public override string[] GetRolesForUser(string roleName) 
    { 
     return db.UserRoleTypes.Select(u => u.UserRoleTypeName).ToArray(); 

    } 
+0

'其中usr.Email ==用戶名'是否正確? – kenwarner

+0

是的,這段代碼確實有效。我只是不知道爲什麼這不起作用,當我做@if(Roles.IsUserInRole(User.Identity.Name,「經理」)) – xivo

+0

您是否已將自定義角色提供程序添加到您的web.config? – kenwarner

回答

0

看來,

User.IsInRole(rolename)
使用​​ 我花了一段時間才能找出答案。

相關問題