2012-02-10 22 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端点的两倍以及应该何时使用它们。