2011-08-14 2 views
0

칠판 유형 응용 프로그램을 사용한다고 가정합니다. ProjectA와 ProjectB의 두 가지 프로젝트가 있습니다. 사용자 'nupul'(나)는 두 프로젝트의 일부입니다. A의 경우 관리자이고 B의 경우 나는 단지 '회원'입니다 (관리자 권한 없음)Restlet : 사용자가 액세스하는 '프로젝트'(그룹)에 따라 역할 추가

/MySite/ProjectA/Items에서 리소스에 액세스 할 때 사용자가 관리자인지 확인하고 싶습니다.

나는, 그것은 단순히 요청에서 {projectName} 매개 변수를 따기와 등을 DB에 대한 확인 및 전달 (사용자 요청을 만드는)을 식별자를 사용하여 수행 할 수 있습니다 알고

내 질문은 '인증 과정에서 Enroler를 사용하여 역할을 어떻게 추가 할 수 있습니까?'입니다. 그 단계에서 나는 {projectName} 매개 변수에 액세스 할 수 없기 때문에 이 작업을하기 위해 Groups/Realms 등을 사용해야하는지 여부는 모르겠지만 솔직히이 방법을 효과적으로 사용하는 방법을 이해하기까지는 너무 오래 걸릴뿐입니다. (즉, 요청이 리소스로 전달되기 전에)

나는이 그룹/영역을 만들 수 있음을 알고 있지만 자원에서 올바른 '역할'에 어떻게 액세스합니까? Restlet은보다 현실적인 예제와 클래스 사용을 보여주는 훨씬 더 나은 문서를 심각하게 필요로합니다 !! 그것은 나를 미치게 만든다 !! 인증이 너무 어려워서는 안됩니다! :)

+0

당신을 도움이되기를 바랍니다, 우리는 보안 장을 포함하여 책 "액션에으로 Restlet의"를 작성 마무리된다. 또한 온라인 사용자 가이드를 정기적으로 개선하고 있지만 일부 영역은 실제로 개선이 필요합니다. 2.2 버전에서는 보안 및 지속성을 포함한 현실적인 예제를 사용하여 새로운 세부 자습서를 작성할 계획이었습니다. 우리는 또한 앞에서 공헌자들을 환영합니다. –

+0

@Jerome : 프레임 워크가 너무 좋아서 몇 가지 예를 기꺼이 제공 할 것입니다. 일단 안정적인 솔루션을 얻으면 알려 드리겠습니다. 책에 없으면 적어도 온라인 예제/자습서의 일부가 될 수 있습니다 :) – PhD

+0

그 멋진 Nupul 소리! 문서 제공 지침은이 페이지를 참조하십시오 : http://wiki.restlet.org/authors/399-restlet.html –

답변

0

원하는 작업을 수행하는 방법은 응용 프로그램 내에서 프로젝트 이름을 기반으로 라우터를 분할하는 것입니다 (createInboundRoot 메서드). 이 경우, 프로젝트 이름은 인증자를 호출하기 전에 평가됩니다. 이러한 접근 방식을 구현하는 몇 가지 예 아래 참조 : 같은 방법을 사용

public Restlet createInboundRoot() { 
    Router rootRouter = new Router(getContext()); 
    rootRouter.setDefaultMatchingMode(Template.MODE_STARTS_WITH); 

    rootRouter.attach("/{projectname}/", createApplicationForProject()); 
    return rootRouter; 
} 

private Restlet createApplicationForProject() { 
    Router router = new Router(getContext()); 

    ChallengeAuthenticator guard 
      = new ChallengeAuthenticator(getContext(), 
         ChallengeScheme.HTTP_BASIC, "realm"); 
    guard.setVerifier(verifier); 
    guard.setEnroler(enroler); 
    guard.setNext(router); 

    router.attach("items", ItemsServerResource.class); 
    return guard; 
} 

, 당신은 검증 내에서 프로젝트 이름 변수의 값에 액세스 할 수 있으며 인증 처리를 사용할 수 있습니다.

는이 문서의 부족과 관련하여, 티에리

+0

'Template.MODE_STARTS_WITH'를 사용하고 있습니까? 나는 계층 적 매칭을하고 기본값은'BEST_MATCH'라고 생각하니? (기억하지 마십시오)하지만 후자의 경우 잘못된 일치로 이어지지 않습니까 ?? 이것은 깔끔한 해결책이고 나는 그것에 대해 생각하지 않았지만이 접근 방식을 사용하는 '반향'을 알고 싶습니다. – PhD

+0

나는 계층 적 w.r.t를 의미합니다. myproject 아래에있는 URL의 각 부분이 반환 될 수있는 리소스 인'/ {projectName} /'다음에'myproject/items/{id}/options/{id}/part/{id}'다음에 ... so 위의 질문은 MODE_STARTS_WITH라면 "중요합니까?" – PhD