2012-05-28 18 views
1

我正在設計一個Web API並且它處於最基本的階段。API設計:我如何處理以下情況,從而涉及用戶權限/角色管理

我係統中的每個用戶都可以擁有一個或多個角色。 (示例用戶和管理員)。

本身被設計爲例如模塊和方法的API我有一個模塊的用戶在其下有以下方法

USER

  • get_friends_of
  • get_profile_pic_url

現在,在我的用戶角色管理代碼中,每種方法都是「正確的」。這些權限分配給例如一個或多個角色中,兩個角色看起來像

USER_ROLE = [「get_profile_pic_url」] ADMINISTRATOR_ROLE = [「get_profile_pic_url」,「get_friends_of」]

所以每當用戶試圖調用我看到的方法是否任何他的角色都提到這種方法作爲一種權利。如果是,那麼它被調用,否則它不是。

除了在下列情況下,它的工作方式與黃油相同。

用戶X通常無權調用'get_friends_of',但我想讓他在每次嘗試取回自己的朋友時調用該方法。

例如get_friends_of(X)是允許的,但get_friends_of(y)將被拒絕。

我的問題是如何將這些案例納入我的設計?

一個直接的解決方案可能是我引入了「get_my_friends」方法,但它增加了我的API的大小,我不得不寫更多的文檔,並去看看它實際上只是一個「get_friends_of」的特例。從某種意義上講,它也不具有可擴展性,我可能希望允許用戶看到朋友的朋友。

我的API中的設計目標之一就是每個方法都是相互排斥的。

回答

0

在我看來,你的User模塊以兩種不同的方式被使用 - 代表個人User實體(get_my_friendsget_profile_pic_url箱子),並提供一般用戶相關權限(get_friends_of情況下)。您可能需要考慮將這些問題分離出來,可能是UserUserRepository,前者代表真實世界User,後者擁有朋友和個人資料圖片網址,後者則提供對User的通用訪問。

以下是一些鏈接解釋更多關於您遇到的概念:

1

您的授權工作的方式......你有 - 用戶 - - >角色 - 角色 - >權利(功能名稱)

如果你執行你正在嘗試做的事......你會做到這一點: - 角色 - >權利(功能名稱+特定參數值)。

這感覺不對。你可以擁有基於函數名和參數值的權限,但是你的整個授權邏輯將會有太多的邏輯......它會變得非常複雜。

我建議你做你說的....創建一個新功能get_my_friends()

相關問題