2017-05-05 44 views
1

假設我們有兩種用戶,管理員和標準用戶。通過用戶權限篩選RESTful API中的資源的最佳方式是什麼?

我們有一個名爲post的資源。對於GET方法,我希望管理員查看所有帖子,但標準用戶只能查看post.created_by={currentUserID}的帖子。

現在我有三個選項:

  • 使用/api/post/api/mypost。上面是我可以很容易地控制返回的結果,並根據用戶範圍分配不同的權限。缺點是我會重複這些代碼和文檔。

  • 使用/api/post兩種,而對於標準的用戶,如果沒有?createdBy={id}它則拒絕該請求。

  • 對於兩者都使用/api/post,但該方法的行爲會因認證而異。對於標準用戶,返回的列表總是被過濾。對於/api/post/{id},它將爲不屬於用戶的帖子返回HTTP 403。

我應該選擇哪一個?

回答

0

第一個選項並不理想,因爲(如您所說),它很容易出現代碼重複。

如果第二個不只是當前用戶標識有意義,它也可以工作。

但是,鑑於您必須以任何方式進行身份驗證,我會選擇第三種方式,因爲它可能是最普遍的解決方案。不同的用戶根據他們的權限/資產組合,以一種乾淨的方式看到不同的東西,不會搞亂url的查詢字符串。

0

基本上沒有差別,它只是路由:/api/post/api/mypost/api/post/{id} = /api/post/{createdBy} = /api/post?createdby={id}。您甚至可以僅爲管理員添加管理員區域。

但是,有一條規則適用於所有選項:管理員具有完全訪問權限,而普通用戶只能訪問他們自己的帖子。

如果指定了Id,但未找到匹配的帖子,則爲管理員和用戶返回「未找到」。

我應該選擇哪一個?

這不是由我自己決定的。這取決於你的設計。

您的代碼必須維護,因此應以邏輯(或功能)方式構建您的應用程序。至於冗餘代碼,請嘗試使用(通用)函數,擴展或'HelperClasses'並使用存儲庫。

相關問題