2010-02-08 3 views
2

새로운 ASP.NET MVC 응용 프로그램에 내 사용자 지정 권한 시스템을 접착하고 싶습니다. 나는 앱을 위해 내 자신의 커스텀 AuthorizeAttribute를 작성하는 데 상당한 노력을 기울였다. 나 또한 내 자신의 사용자 지정 MembershipProvider 및 RoleProvider 구현을 작성했습니다. 이 모든 작업은 사용자가 맡은 역할을 점검해야 할 때까지 아름답게 작동합니다. 나는이 모든 그래서 나는 단지 내 컨트롤러에서이 작업을 수행 할 수 있습니다를했고, 나는 프로토 타입으로 내 코드에 맞게 복고풍하기 VS2010의 기본 MVC 템플릿을 사용 :내 MVC 앱에서 사용자 정의 RoleProvider GetUserRoles 메소드에 둘 이상의 값을 전달하는 방법은 무엇입니까?

[CustomAuth(Roles='X')] 
public ActionResult DoSomething() 

내 사용자 정의 시스템은 비록 조금 괴팍스러운 것입니다. 나는 SQL 데이터베이스를 호출하지 않는다. CheckPassword, GetPermissions, WebLogin의 3 가지 메소드를 제공하는 간단한 웹 서비스입니다. WebLogin은 CheckPassword와 GetPermissions를 하나의 호출로 간단하게 래핑합니다. ValidateUser 내에서 WebLogin을 사용하지 않으면 MembershipProvider.ValidateUser (userName, password) 내에서 TestPassword를 호출했으며이 호출이 성공했을 때 UserID를 다시 얻었습니다. 그렇지 않으면 실패하고 NULL이 반환됩니다.

문제는 RoleProvider 구현을 호출 할 때입니다. 추상 클래스는 단일 매개 변수가 userName 인 GetRolesForUser를 정의했습니다. 내 GetPermissions() 메소드에는 하나의 userName 이상이 필요합니다. 그것은과 같이 정의된다 :

GetPermissions(privateKey,userName) 

분명히, 다음 RoleProvider 메소드 내에서 이것을 호출하면 작동하지 않을. 상자에서 지원되는 메서드에 privateKey를 전달할 수 없습니다.

public override string[] GetRolesForUser(string username) 

내 사용자 지정 RoleProvider에서 내 자신의 사용자 지정 메서드를 호출 할 수 있습니까?

답변

3

역할 공급자를 사용자 지정 형식으로 캐스팅 할 수 있으므로 메서드에 액세스 할 수 있습니다. 함수가 인터페이스 외부에 있으므로 응용 프로그램과 역할 공급자가 긴밀하게 연결됩니다.

RoleProvider rp = Roles.Provider; 
    (rp as MyRoleProvider).GetPermissions(privateKey,userName); 
+0

알다시피,이 실제로 잘 작동합니다. 도움을 주셔서 감사합니다 – PerryM

+0

이것이 작동하는 동안 한 가지 부작용은 내 web.config에서 해당 옵션을 설정할 때 내 사용자 정의 GetRolesForUser 메소드가 쿠키의 역할을 캐시하지 않는 것처럼 보입니다. – PerryM

1

나는 그것을해야한다고 생각 :

(RoleProvider as MyRoleProvider).GetPermissions(privateKey,userName);