2010-04-19 12 views
8

Mamy system wielu dzierżawców z wieloma różnymi poziomami dostępu - czasami nawet dla tego samego użytkownika, który przełącza się między wieloma rolami. Rozpoczynamy dyskusję na temat przejścia na RESTful implementację rzeczy. Właśnie zaczynam dostawać nogi na mokro z całą rzeczą REST.REST, buforowanie i autoryzacja z wieloma rolami użytkowników

Jak więc ograniczyć dostęp do prawidłowych rekordów, gdy uzyskują dostęp do zasobu, szczególnie biorąc pod uwagę buforowanie? Jeśli użytkownik uzyska dostęp example.com/employees, otrzyma inną odpowiedź niż użytkownik B; użytkownik A może nawet otrzymać inną odpowiedź, gdy przełączy się na inną rolę. Aby ułatwić buforowanie, czy identyfikator roli powinien zostać w jakiś sposób włączony do URI? Może coś w rodzaju example.com/employees/123 (które narusza reguły REST), lub jak jakiś podrzędny zasób, taki jak example.com/employees/role/123 (co wydaje się głupie, ponieważ role/### będzie dołączane do URI w każdym miejscu). Mogę pomóc, ale myślę, że tu coś pomijam.

edytowane wspominając wielowątkowości

Odpowiedz

7

posiadające poświadczenia użytkownika działać jako out of band identyfikatora zasobów (np. Przedstawiając różne poglądy na temat tej samej zawartości do różnych ról) zamieni paskudny w dół drogi. Użytkownicy i aplikacje wymieniają między sobą adresy URL, sytuacja staje się kwaśna, gdy tak się dzieje, a adres URL po prostu zwraca inną treść dla różnych poświadczeń.

Powiedziałbym, że każda rola ma inny pogląd na świat, dlatego każda rola powinna przejść inną ścieżkę do usługi:

  • administratorzy połączyć się example.com/admin/employees
  • użytkowników połączyć example.com/users/employees
  • rola foo prawdopodobnie łączy się example.com/foo/employees

ten sposób oddzielić „tę rolę widzi świat jako taki i taki” równi t od "tego poglądu na świat jest dostępna rola foo". Administrator może połączyć się z example.com/users/employees i sprawdzić, w jaki sposób zwykły użytkownik widzi świat, bez konieczności podawania podrzędnego niższego uprzywilejowanego aliasu.

Możesz również użyć części DNS w tym samym celu: admin.example.com/pracownicy- użytkownicy.example.com/pracownicy. Jest to szczególnie opłacalne w odniesieniu do powiązanego scenariusza, w którym "rola" nie jest rolą bezpieczeństwa, ale obszarem nazw obejmującym wiele dzierżawców (tj. Każde konto z obsługą usług otrzymuje swój własny "widok" usługi).

+0

Całkowicie się z tym zgadzam. Wyobraź sobie inny scenariusz, gdy zdecydujesz się wdrożyć wyszukiwarkę, która przeszukuje zasoby. Jeśli używasz tych samych adresów URL do różnych poziomów dostępu, wyszukiwarka musi zaindeksować te same adresy URL z różnymi poświadczeniami i w jakiś sposób upewnić się, że wyniki są ograniczone do odpowiedniego poziomu dostępu. Posiadanie różnych zasobów dla różnych poziomów dostępu znacznie ułatwia. –

+0

Dzięki! Mam pytanie uzupełniające na http://stackoverflow.com/questions/2676786/should-a-given-uri-inful-architecture-always-return-the-same-response – keithjgrant

Powiązane problemy