2010-05-27 2 views
0

는 다음을 수행하기 위해 .NET 프레임 워크에이 방법에 내장되어 있습니다 :재정 SQLMembershipProvider

  1. 사용자 이름/사용자 GUID에서 GUID 역할을 리턴

그래서 역할 GUID에서 역할 이름을 가져옵니다 멀리 내가 그 정보를 얻기 위해 asp_roles 및 asp_users 테이블에 쿼리를 보냈습니다 및이 일을 더 좋은 방법이 있는지 궁금하네요?

getRoleGUID(guid userGuid) { LINQ joins } 

getRoleGuid(string userName) { LINQ joins } 

getRoleName(guid roleGuid) { LINQ joins } 

편집이 :

난 그냥 SQLMembershipProvider 예를 연장으로 보았다

나는 내가 ASPUtilities 클래스에 저장 한 다음과 같은 방법이있다.

SQLMembershipProvider를 완전히 무시하는 예제는 거의 없지만 LINQ를 사용하여 역할을 처리하는 몇 가지 추가 메서드를 추가하는 것만으로도 충분하다고 생각합니다. 이것이 가능한가?

+0

Role 클래스를 살펴본 적이 있습니까? –

+0

역할 이름을 표시하지만 역할 GUID는 표시하지 않습니다. 내 주요 목표는 역할 이름으로 역할을 유도하고 그 반대도 마찬가지입니다. –

+0

저는 회원 서비스 제공자와 많은 관계를 맺었습니다. 왜 역할을 원하는지 알고 싶습니다. – jim

답변

1

SQLMembership 공급자를 확장하면 roleID가 세션에 저장되지 않으므로 데이터베이스와 쿼리가 동일하게 처리되므로 해당 정보를 얻을 수 있습니다. 그렇게 많은 어려움을 겪고 싶지 않으면 몇 가지 일을 할 수 있습니다.

  1. 호출 할 수있는 이러한 메서드로 사용자 지정 클래스를 만들고 역할의 ID를 반환합니다. 본질적으로 모든 쿼리를 한 위치로 이동하십시오.
  2. 로그인시 세션에 역할 ID를 저장하십시오. 위에 작성한 메소드를 호출하고 매번 다시 쿼리하지 마십시오. 하지만 보안 상 위험한 정보 (세션 ID)를 저장하기 때문에 보안 위험은 100 %가 아닙니다. 그래도 지나치게 조심 스러울 수도 있습니다 :)
+0

안녕하세요, 감사합니다. 네, 그게 제가 현재하고있는 일입니다. 세션 변수에 역할을 저장하는 것에 너무 열중하지 않습니다. 역할 목록이 될 것이고 관리자 사용자가 역할에 추가/제거 할 수 있기 때문에 세션의 정보가 동기화되지 않게됩니다. . 유틸리티 클래스는 합리적인 옵션처럼 보입니다. 일부 데이터는 .Net 클래스에서 가져오고 일부는 내 클래스에서 가져 오는 데 너무 열렬하지 않지만 지금까지는 대안을 찾을 수 없습니다. 어쨌든 그것은 나쁜 구현이 아닙니다. –

+0

일부 .NET 클래스 및 클래스에서 데이터를 가져 오는 것을 단순화하고 마스킹하려면 utiltiy 클래스에서 자신의 메서드 이름으로 .NET 메서드를 래핑하십시오. IE, utilityClass.getRoleName()은 httpcontext.current.user.getRoles (또는 해당 호출이 무엇이든)를 반환합니다. 그 중 일부를 청소하는 데 도움이 될지도 모르지만, 실제로 그렇게하는 것이 유일한 이점입니다. – Tommy

+0

안녕 토미, 아이디어를 주셔서 감사합니다. 그것은 "집중화"될 것이고 컨트롤러/웹 메소드에는 많은 코드가 존재하지 않을 것입니다. –

관련 문제