2014-04-16 77 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

这也解决了我的问题,但我可以不帮助我们认为我们忽略了潜在的问题。应该可以缓存角色,当然? –

相关问题