2012-02-10 54 views
1

如何模擬資源上可見數據的限制?不同的人正在訪問相同的資源,但具有不同的角色,因此他們不能看到所有的信息。信息
解決方案,無需訪問限制:如何模擬資源上可見數據的限制?

的情況下,我的工作

User: 
    name 
    phoneNumber 

如果任何人都可以訪問它,這將是很容易爲模型:

GET /User -> [{name:"John", phoneNumber: "322-333"}] 
GET /User/{id} -> {name:"John", phoneNumber: "322-333"} 

然而,說我有兩個角色,管理員和用戶。電話號碼只能對同時也是管理員的用戶可見。授權令牌通過cookie,頭文件或類似方式傳輸。服務器將知道請求者具有哪些角色。如何設計一個API來處理這個問題?我有幾個想法:

1)幼稚的解決方案將只是過濾它,並保留字段未設置,如果你不允許訪問它,即。

If user: GET /User -> [{name:"John"}] 
If admin: GET /User -> [{name:"John", phoneNumber: "322-333"}] 

2)在URL中嵌入的作用:

If user is wanted as a User: GET /User/User -> [{name:"John"}] 
If user is wanted as an Admin: GET /Admin/User -> [{name:"John", phoneNumber: "322-333"}] 

3)定義一個新的資源的字段的每個可能子集:

If user is wanted as a User: GET /PublicUserInfo -> [{name:"John"}] 
If user is wanted as an Admin: GET /FullUserInfo -> [{name:"John", phoneNumber: "322-333"}] 

會採用不同的方法更好?
有沒有人有在實踐中解決的解決方案的經驗?

回答

0

根據經過驗證的用戶使用選項1。如果您選擇2或3個客戶端來實現您的API,則必須擔心任何API端點的兩倍以及應該何時使用它們。