2013-03-27 71 views
2

我正在寫一組休息服務,並且在一些資源中,我正在處理以下情況。例如:REST資源上的權限

與資源:

/文章

用戶可以創建文章,用戶不能刪除任何物品。用戶可以獲取他們創建的所有文章(GET /文章)的列表,但無法查看其他用戶的文章。將會有一組特殊的「管理員」用戶,這些用戶將有足夠的權限查看或刪除任何文章。

我看到兩種方法是:

  • 由於只有一個端點與例子,並處理了POST服務的代碼中的權限,GET和DELETE

  • 具有不同的端點/ admin/articles,具有獨立的實現,並在處理認證之後和服務代碼之前處理權限。

你認爲哪一個更好/更清潔/ RESTfullish?

+0

我不能說「安寧」,但由於您使用的是相同的資源,至少部分執行了相同的操作並且只有不同的權限,所以我覺得分離端點有點奇怪。 – 2013-03-27 11:03:37

回答

1

如果兩個用戶可以創建具有相同標識符的文章,那麼它更「乾淨」,並且更容易在像文件系統這樣的更深層次表示它們。

/{名} /文章

如果他們都創造了同一個用戶空間的文章,那麼每個資源的授權是比較充足的。

+0

對GET有意義,但假設當使用該結構'/ {username}/articles'時,普通用戶將通過POST在該資源上添加文章。如果管理員用戶必須能夠在特定用戶名稱空間中編寫文章(模擬其他用戶),該怎麼辦?將它發佈到用戶空間上會更好嗎?在單獨的/ admin/articles服務中? – SuNbiT 2013-03-27 11:20:48

+0

您可以將其視爲模擬,但/ {用戶名}只不過是管理員用戶擁有寫入權限的位置。執行動作的用戶的身份通過其他方式處理,如身份驗證標頭。如果管理員需要編寫自己的文章,那麼他們可以像普通用戶一樣行事。 – Kafkaesque 2013-03-27 11:37:56

+0

好的,非常感謝! – SuNbiT 2013-03-27 13:27:34

0

我會去的第一個辦法 - 有以下原因相同端點:

  1. 清潔和更容易理解。
  2. 更容易維護 - 假設您將來會有更多角色。這將強制爲您添加的每個角色創建更多端點。
  3. 鬆耦合。通過使用這種方法,您可以將應用程序的授權問題與API本身解耦。
  4. 無論如何,您必須檢查代碼本身的授權,以檢查客戶端是否調用未經授權的資源,因此您不會使用第二種方法保存任何內容。