2010-04-19 38 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)的某種下級資源。我可以幫助,但認爲我在這裏失去了一些東西。

編輯提多租戶

回答

7

具有用戶憑據作爲帶外資源標識符(即呈現在相同的URL,以不同的角色不同的看法)會變成討厭的道路。用戶和應用程序在它們之間交換URL,發生這種情況時情況會變得很糟糕,並且URL僅爲不同的憑證返回不同的內容。

我想說的是每個角色擁有世界不同的看法,因此每個角色應該對服務的訪問不同的路徑:

  • 管理員連接到example.com/admin/employees
  • 用戶連接到example.com/users/employees
  • 作用FOO可能連接到example.com/foo/employees

這樣你分開「這個角色看待世界某某」相提並論來自'這個世界的這個視角可以通過角色foo'來獲得。管理員可以連接到example.com/users/employees並驗證普通用戶如何看待這個世界,而無需管理員首先模擬較低特權的別名。

您也可以將DNS部分用於同一目的:admin.example.com/employees與users.example.com/employees。當「角色」不是一個安全角色,而是一個多租戶名稱空間(即每個服務供應帳戶都有它自己的服務「視圖」)時,這對於相關場景特別可行。

+0

我完全同意。想象一下當您決定實施抓取資源的搜索引擎時的另一種情況。如果您針對不同的訪問級別使用相同的網址,搜索引擎必須使用不同的憑據來抓取相同的網址,並以某種方式確保結果僅限於適當的訪問級別。爲不同的訪問級別提供不同的資源使事情變得更容易。 – 2010-04-20 00:46:03

+0

謝謝!我有一個後續問題http://stackoverflow.com/questions/2676786/should-a-given-uri-in-a-restful-architecture-always-return-the-same-response – keithjgrant 2010-04-20 16:19:43