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

그리고 내 CustomRoleProvider에 중단 점을 설정하면, 그것은 충돌 결코 극복

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

의 Web.config

내 코드입니다 .. .

어떤 아이디어?

+0

이와 같은 구성 요소를 사용할 때 디버거가 항상 적중하는 것은 아닙니다. 어떤 이유로 든 디버거에서 제대로 연결되지 않습니다. 대신 디버거를 중지하려면 Debugger.Break() 문을 추가하십시오. –

+0

실제로 네임 스페이스가 web.config에 나열된 네임 스페이스와 일치하지 않습니다. –

+0

사실 나는 그저 OP Ill의 수정을했는데, 실제 코드에서는 그다지 문제가되지 않았다. 또한 디버깅 된 것을 추가하려고 시도했지만 아직 깨지는 것이 없습니다 – StevieB

답변

1

솔루션의 별도 프로젝트에있는 사용자 지정 공급자 코드가 솔루션의 MVC 프로젝트에 대한 참조로 추가 되었습니까? 그렇다면 다음과 같은 것이 필요할 수도 있습니다 :

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

같은 해결책이 아닙니다 .... 저는 실제로 웹 설정 cacheRolesInCookie = "true"를 rollmanager 섹션의 일부로 없애서 운이 좋았습니다 – StevieB

+0

이 문제가 저에게도 해결되었지만 근본적인 문제를 무시하고 있다고 생각하는 데 도움이되지 않습니다. 역할을 캐시 할 수 있어야합니다. –

관련 문제