2014-04-16 119 views
1

我添加了一個自定義角色提供者,但由於什麼原因它沒有被使用,它似乎默認是繼續使用。這裏是我的自定義角色提供MVC自定義角色提供者沒有被擊中

namespace Models.Security 
{ 
    public class MatchMakerRoleProvider: RoleProvider 
    { 
     public override string[] GetRolesForUser(string username) 
     { 
      username = username.Split('\\')[1].ToLower(); 
      using (var db = new EncodingEntities()) 
      { 
       var user = db.Admin_Users.FirstOrDefault(u => u.UserName.Equals(username, StringComparison.CurrentCultureIgnoreCase)); 


        var roles = from ur in user.Admin_UserRoles 
         from r in db.Admin_Roles 
         where ur.RoleId == r.RoleId 
         select r.RoleName; 
        if (roles != null) 
         return roles.ToArray(); 
        else 
         return new string[] {}; 
      } 
     } 

     public override string[] GetUsersInRole(string roleName) 
     { 
      throw new NotImplementedException(); 
     } 

     public override bool IsUserInRole(string username, string roleName) 
     { 
      using (var db = new EncodingEntities()) 
      { 
       var user = db.Admin_Users.FirstOrDefault(u => u.UserName.Equals(username, StringComparison.CurrentCultureIgnoreCase)); 

       var roles = from ur in user.Admin_UserRoles 
          from r in db.Admin_Roles 
          where ur.RoleId == r.RoleId 
          select r.RoleName; 
       if (user != null) 
        return roles.Any(r => r.Equals(roleName, StringComparison.CurrentCultureIgnoreCase)); 
       else 
        return false; 
      } 
     } 
    } 
} 

我的控制器

[Authorize(Roles = "SuperAdmin")] 
public class AdminController : Controller 

而且Web.Config中

<authentication mode="Windows"> 
</authentication> 
<roleManager enabled="true" defaultProvider="MatchMakerRoleProvider" cacheRolesInCookie="true"> 
    <providers> 
    <clear/> 
    <add name="MatchMakerRoleProvider" type="Models.Security.MatchMakerRoleProvider" /> 
    </providers> 
</roleManager> 

如果我設置在我CustomRoleProvider斷點,它從來沒有被擊中代碼.. 。

任何想法?

+0

使用這樣的組件時,調試器並不總是命中。無論出於何種原因,它們都無法正確連接到調試器中。相反,添加Debugger.Break()語句強制調試器停止。 –

+0

其實,我也注意到你的命名空間與你在web.config中列出的命名空間不匹配。 –

+0

其實我改變這只是爲了OP我修正了這個問題,這在實際代碼中是沒有問題的。此外,我嘗試添加已調試的東西,但仍未碰到 – StevieB

回答

1

自定義提供程序代碼是否在解決方案的單獨項目中,並作爲對解決方案中的MVC項目的引用添加?如果是這樣,你可能需要有這樣的東西:

<add name="CustomRoleProvider" type="Namespace.For.CustomRoleProvider, Your.Assembly.Name" /> 
+2

不是它在相同的解決方案....我實際上只是有一些運氣通過擺脫這個在web config cacheRolesInCookie =「true」作爲角色管理器部分的一部分 – StevieB

+0

這也解決了我的問題,但我可以不幫助我們認爲我們忽略了潛在的問題。應該可以緩存角色,當然? –

相關問題