2010-04-19 2 views
8

우리는 여러 사용자가 여러 역할을 전환 할 때와 같이 여러 수준의 액세스 권한을 가진 다중 사용자 시스템을 사용합니다. 우리는 RESTful 구현으로 넘어 가기위한 논의를 시작하고있다. 나는 단지 모든 REST 일로 발을 씻기 시작했다.여러 사용자 역할로 REST, 캐싱 및 권한 부여

그렇다면 리소스에 액세스 할 때 올바른 레코드에 대한 액세스를 제한 하시려면 어떻게해야합니까? 특히 캐싱을 고려할 때 특히 그렇습니다. 사용자 A가 example.com/employees에 액세스하면 사용자 B와 다른 응답을 받게됩니다. 사용자 A는 다른 역할로 전환함에 따라 다른 응답을받을 수도 있습니다. 캐싱을 용이하게하기 위해 역할의 ID를 uri에 통합해야합니까? 어쩌면 example.com/employees/123 (REST 규칙을 위반) 또는 example.com/employees/role/123과 같은 종속 리소스의 일부일 수 있습니다 (role/###은 모든 곳의 URI에 추가 될 것이므로 바보처럼 보일 것입니다). 나는 도울 수 있지만, 내가 여기서 뭔가를 놓치고 있다고 생각합니다.

는 멀티 테넌시 (multi-tenancy)

답변

7

사용자 자격 증명이 밴드 리소스 식별자의 출력 (즉. 서로 다른 역할에 동일한 URL에 다른 의견을 제시하는) 길 아래에 불쾌한집니다 역할을 갖는에게 말할 편집. 사용자와 애플리케이션은 둘 사이에서 URL을 교환하고 상황이 발생하면 사물이 변하고 URL은 다른 자격증 명에 대해 다른 콘텐츠를 반환합니다.

  • 관리자가
  • 사용자를 example.com/admin/employees에 연결 :

    그래서 저는 각각의 역할은 서비스에 다른 경로에 액세스해야, 각 역할은 세계의 다른 견해를 가지고 있다고 말할 것입니다

  • 역할 foo는 아마

당신이 분리이 방법 example.com/foo/employees에 연결 파 '이 역할은과 같은 세상을 본다' example.com/users/employees에 연결 '세계의이 견해'는 'foo 역할에 접근 할 수있다'는 부분에서 벗어났다. 관리자는 example.com/users/employees에 연결할 수 있으며 관리자가 낮은 권한의 별칭을 가장해야하는 경우를 제외하고 일반 사용자가 어떻게 세상을 보는지 확인할 수 있습니다.

같은 목적으로 DNS 부분을 사용할 수도 있습니다 (admin.example.com/employees 대 users.example.com/employees). 이것은 '역할'이 보안 역할이 아니라 멀티 테넌트 네임 스페이스 (즉, 각 서비스 제공 계정이 서비스의 '보기'를 얻음)와 같은 관련 시나리오에서 특히 유용합니다.

+0

전적으로 동의합니다. 리소스를 크롤링하는 검색 엔진을 구현하기로 결정한 다른 시나리오를 생각해보십시오. 서로 다른 액세스 수준에 대해 동일한 URL을 사용하는 경우 검색 엔진은 서로 다른 자격 증명을 사용하여 동일한 URL을 크롤링하고 결과가 적절한 액세스 수준으로 제한되도록해야합니다. 서로 다른 액세스 수준에 대해 서로 다른 리소스를 사용하면 훨씬 쉽게 작업 할 수 있습니다. –

+0

고마워요! http://stackoverflow.com/questions/2676786/should-a-given-uri-in-a-restful-architecture-always-return-the-same-response에서 후속 질문이 있습니다. – keithjgrant

관련 문제