2010-04-19 39 views
8

Chúng tôi có một hệ thống nhiều người thuê với nhiều cấp truy cập khác nhau - đôi khi ngay cả đối với cùng một người dùng khi họ chuyển đổi giữa nhiều vai trò. Chúng tôi đang bắt đầu một cuộc thảo luận về việc chuyển sang thực hiện các điều RESTful. Tôi chỉ mới bắt đầu bị ướt chân với toàn bộ điều REST.REST, caching và ủy quyền với nhiều vai trò người dùng

Vậy làm cách nào để hạn chế quyền truy cập vào hồ sơ chính xác khi họ truy cập tài nguyên, đặc biệt khi xem xét lưu vào bộ nhớ đệm? Nếu người dùng A truy cập example.com/employees họ sẽ nhận được phản hồi khác với người dùng B; người dùng A thậm chí có thể nhận được phản hồi khác khi anh chuyển sang vai trò khác. Để giúp tạo điều kiện cho bộ nhớ đệm, nên id của vai trò được bằng cách nào đó kết hợp vào uri? Có lẽ một cái gì đó như example.com/employees/123 (vi phạm các quy tắc của REST), hoặc như một số loại tài nguyên cấp dưới như example.com/employees/role/123 (có vẻ ngớ ngẩn, vì role/### sẽ được nối thêm vào URI trên khắp nơi). Tôi có thể giúp đỡ nhưng nghĩ rằng tôi đang thiếu một cái gì đó ở đây.

chỉnh sửa để đề cập đến multi-tenancy

Trả lời

7

Có chứng chỉ người dùng đóng vai trò là một trong số định danh tài nguyên băng tần (ví dụ. Trình bày quan điểm khác nhau trên cùng một URL để vai trò khác nhau) sẽ biến khó chịu xuống đường. Người dùng và ứng dụng trao đổi URL giữa họ, mọi thứ trở nên chua chát khi điều đó xảy ra và URL chỉ trả về nội dung khác nhau cho các thông tin đăng nhập khác nhau.

tôi sẽ nói rằng mỗi vai trò có một cái nhìn khác nhau của thế giới, do đó mỗi vai trò cần truy cập vào một con đường khác nhau để các dịch vụ:

  • quản trị viên kết nối với example.com/admin/employees
  • người dùng kết nối với example.com/users/employees
  • vai trò foo lẽ sẽ kết nối với example.com/foo/employees

Bằng cách này bạn tách 'vai trò này thấy thế giới như vậy và như vậy' mệnh t từ 'quan điểm này của thế giới có thể truy cập vào vai trò foo'. Quản trị viên có thể kết nối với example.com/users/employees và xác minh cách người dùng thông thường nhìn thế giới, trước tiên quản trị viên phải mạo danh một bí danh đặc quyền thấp hơn.

Bạn cũng có thể sử dụng phần DNS cho cùng một mục đích: admin.example.com/employees vs. users.example.com/employees. Điều này đặc biệt khả thi đối với một kịch bản có liên quan, khi 'vai trò' không phải là vai trò bảo mật mà là không gian tên nhiều bên thuê (nghĩa là mỗi tài khoản được cung cấp dịch vụ đều có 'chế độ xem' của dịch vụ).

+0

Tôi hết lòng đồng ý. Hãy tưởng tượng kịch bản khác khi bạn quyết định triển khai công cụ tìm kiếm thu thập tài nguyên. Nếu bạn sử dụng cùng một url cho các cấp độ truy cập khác nhau, công cụ tìm kiếm phải thu thập dữ liệu các URL giống nhau bằng các thông tin xác thực khác nhau và bằng cách nào đó đảm bảo kết quả bị giới hạn ở cấp truy cập thích hợp. Có các tài nguyên khác nhau cho các cấp truy cập khác nhau giúp mọi thứ trở nên dễ dàng hơn nhiều. –

+0

Cảm ơn! Tôi có câu hỏi tiếp theo tại http://stackoverflow.com/questions/2676786/should-a-given-uri-in-a-restful-architecture-always-return-the-same-response – keithjgrant

Các vấn đề liên quan