2012-09-04 1 views
0

일반적인 문제 : 클래스/메서드 특성을 사용하여 모든 .NET 응용 프로그램 (예 : WCF 응용 프로그램)에서 사용자 액세스 권한 차별화 시스템을 구현하는 방법은 무엇입니까?.NET 보안 특성입니다. 사용자 지정 보안 모델을 만들 수 있습니까?

그래서, 우리는이 : 사용자

    1. 세트 (예를 들어, 열거 Role) 역할의 세트
    2. 모든 사용자가 자신의 역할을 자신의 세트를 가지고 있습니다.
    3. 특정 역할에 대해 모든 클래스/메소드를 지정할 수 있습니다.

      [AuthorizationAttribute (역할 = 새로운 역할 [] {Role.Admin})] 공공 UserService 클래스 : IUserService {

      }

    4. 역할 사용자의 설정이 역할을 포함하지 않는 경우, 사용자는 메소드에 액세스 할 수 없어야합니다.

    업데이트. 문제 설명을 더 분명하게하려고 노력했습니다. Akton의 솔루션은이 문제에 유용합니다.

  • +0

    저는이 질문을 마무리 할 이유를 찾을 수 없었습니다. Akton의 훌륭한 대답이 있습니다. 그래서 여기에 무엇이 요청되는지 알려주는 것이 어렵지 않습니다. –

    답변

    3

    당신이 제안한 것처럼 귀속 된 보안 모델을 만들 수는 있지만 쉽지 않습니다. 보안 개체는 ContextBoundObject에서 상속하고 보안 특성은 ContextAttribute (또는 IContextAttribute 인터페이스 구현)이어야합니다. 그 다음 :

    1. IContextAttribute.GetPropertiesForNewContext(IConstructionCallMessage) 메서드를 구현합니다. 객체를 만들려면 MySecurityProperty이라고하고 IContextPropertyIContributeObjectSink 인터페이스를 구현하고 IConstructionCallMessage.ContextProperties 컬렉션에 추가합니다.
    2. MySecurityProperty.GetObjectSink(MarshalByRefObject, IMessageSink) 개체를 생성하려면 MySecurityAspect이라고하고 IMessageSink 인터페이스를 구현하십시오.
    3. MySecurityAspect.SyncProcessMessage(IMessage) 구현에서 실제로 호출 여부를 확인하기 위해 호출을 확인합니다. 메서드 호출을 나타내는 IMethodMessage으로 캐스팅 된 경우 IMethodMessage의 속성을 쿼리하여 보안 특성이있는 메서드 나 클래스를 호출하는지 확인하고 적절한 검사를 수행 할 수 있습니다. 호출이 허가되지 않은 경우 적절한 유형의 예외를 throw합니다.

    정상적으로 작동하려면 몇 시간이 걸릴 수 있지만 일단 확인되면 의미가 있습니다. 이것은 닷넷 프레임 워크의 단지 지원되지 않는 부분 일뿐입니다. 복잡성 이상의 큰 문제는 보안 클래스가 다른 라이브러리 클래스가 아닌 ContextBoundObject에서 상속 받도록해야한다는 것입니다. ContextBoundObject는 MarshalByRef에서 상속되기 때문에 직렬화를 방해 할 수 있습니다.

    자세한 설명은 http://www.developerfusion.com/article/5307/aspect-oriented-programming-using-net/3/을 참조하십시오.

    +0

    예, 내 문제에 대한 정말 좋은 해결책이며, 저에게는 효과적입니다. 고마워, 너 나 많이 도와 줬어. –