문제

좋아요,

나는 내가 뭔가 잘못하고 있다는 것을 알고 있지만 더 나은 방법을 찾을 수 없습니다.저는 사용자가 자신만의 미니 웹사이트를 설정할 수 있는 웹사이트를 개발 중입니다.

닝 같은 것.또한 기본 로그인은 1번뿐이며 각 미니 웹사이트에 대한 액세스는 (지금은) 역할을 통해 제공됩니다.

그래서 제가 지금 하고 있는 방식은 다음과 같습니다.

새로운 미니 웹사이트가 생성될 때마다 - 어쩌겠어요, 저는 제 애플리케이션에 2개의 역할을 생성합니다.어쩌구_사용자 그리고 어쩌구_관리자

미니 웹사이트를 생성하는 사용자에게는 blah_admin 역할이 부여되고 이 미니 웹사이트(또는 네트워크)에 가입하려는 다른 모든 사용자에게는 blah_user 역할이 부여됩니다.

누구나 모든 웹사이트의 데이터를 볼 수 있습니다.단, 데이터를 추가하려면 해당 미니사이트의 회원이어야 합니다(blah_user 역할이 할당되어 있어야 함).

제가 직면한 문제는 역할 기반 시스템을 수행하면 많은 작업을 수동으로 수행해야 한다는 것입니다.User.IsAuthenticated 속성에서 작동하는 Asp.Net 2 컨트롤은 IsAuthenticated 속성과 함께 사용자에게 적절한 역할이 있는지도 확인해야 하기 때문에 기본적으로 나에게는 쓸모가 없습니다.

시스템을 설계하는 더 좋은 방법이 있을 것 같지만 어떻게 해야 할지 잘 모르겠습니다.어떤 아이디어가 있나요?

이 웹사이트는 IIS 6의 ASP.Net 2로 개발되고 있습니다.정말 고마워요!

도움이 되었습니까?

해결책

ASP.NET의 표준 역할 관련 내용은 필요한 것이 아닙니다.다음과 같이 인증 모듈을 변경해 볼 수 있습니다.

  1. 쿠키로 로그인하세요.
  2. 방문자가 어떤 역할을 가지고 있는지 결정하십시오.아마도 사용자와 사이트에 해당하는 특별한 테이블을 사용할 것입니다.
  3. 열거된 사용자 역할로 사용자 지정 주체를 만들고 현재 요청에 ID 및 주체를 할당합니다.

또한 각 사이트마다 특별한 역할을 만드는 것도 좋은 생각이 아니라고 생각합니다.100개의 사이트가 있으면 200개의 역할도 갖게 됩니다.꽤 관리하기 어려운 것 같아요.

비슷한 문제를 해결할 때 우리는 표준 컨트롤을 사용하지 않았습니다.우리는 모든 사이트에서 단일 역할 세트를 사용했습니다.구체적인 사용자의 회원 자격은 현재 사이트 및 이 사이트와의 관계에 따라 결정됩니다.

덧셈:조사할 또 다른 가능성은 ASP.NET 인증 시스템에 존재하는 응용 프로그램입니다.어쩌면 각 하위 사이트를 별도의 애플리케이션으로 분리하는 것이 가능할까요?

업데이트: 우리 애플리케이션에 적합한 방법입니다.

  1. 복제된 역할을 많이 만들지 마십시오.다음 두 가지만 사용하세요.사용자와 관리자.사이트가 공개된 경우 "사용자" 역할은 전역적일 수 있습니다. 한 사이트의 사용자는 다른 사이트의 사용자와 다르지 않습니다."사용자"와 "모든 사람"이 다른 역할인 경우 물론 "사용자"도 사이트에 바인딩되어야 합니다.

  2. 표준 ASP.NET 멤버십 사용자를 사용하되 표준 역할 메커니즘은 사용하지 마십시오.

  3. 사이트와 사용자 간의 관계를 저장하는 메커니즘을 만듭니다.사이트 ID, 사용자 및 역할을 보유하는 간단한 테이블일 수 있습니다.

  4. 재정의해야 할 것은 IsInRole 메서드입니다.(방법에스 정확히 말하면 나중에 다루겠습니다).이 메서드는 IPrinciple 인터페이스에 있으므로 사용자 고유의 주체 개체를 만들어야 합니다.아주 간단합니다.

    1. 이 유형의 IsInRole 메소드는 현재 사이트(HttpRequest에서)를 가져와서 사이트 사용자 테이블을 살펴보고 역할을 가져와야 합니다.
  5. 그런 다음 주체를 요청과 연결해야 합니다.PostAuthenticateRequest 이벤트에서 수행하십시오.

  6. RoleProvider도 있습니다.솔직히 언제 사용되는지는 잘 모르겠지만 IsInRole 메서드도 있습니다.같은 방법으로 재정의할 수 있습니다.하지만 이 공급자의 다른 방법은 더 어렵습니다.예를 들어 AddUsersToRoles입니다.사용자 이름과 역할의 배열을 허용하지만 어떤 컨텍스트(사이트)에 추가해야 합니까?현재로?이 메서드가 언제 호출되는지 모르기 때문에 확실하지 않습니다.그래서 몇 가지 실험이 필요합니다.(Reflector가 도움이 됩니다) RopePrincipal은 자체적으로 RoleProvider를 사용하여 역할 목록을 가져오므로 표준 주체를 사용하여 RoleProvider만 구현하는 것일 수도 있습니다.우리 응용 프로그램의 경우 이는 사실이 아니므로 여기에 어떤 문제가 숨겨져 있는지 말할 수 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top