首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于用户查看权限的不同REST资源内容

基于用户查看权限的不同REST资源内容
EN

Stack Overflow用户
提问于 2012-06-12 12:07:04
回答 2查看 7.1K关注 0票数 28

我想根据访问权限为不同的用户提供相同问题的不同答案。我读到这个问题:

Excluding private data in RESTful response

但我不同意公认的答案,即您应该同时提供/people.xml/unauthenticated/people.xml,因为我对REST的理解是,特定的资源应该驻留在特定的位置,而不是多个取决于您对其感兴趣的信息的多少。

我设计的系统比那个系统要复杂得多。假设用户创建了许多朋友圈,并为他们分配了不同的访问权限。例如,我的“熟人”圈子可能会访问我的生日,而我的“职业”圈子可能会接触到我的就业记录,但事实并非如此。为了应用我提到的问题的答案,我需要有一种方法来获取所有用户的圈子(出于安全原因我可能想要保密),然后遍历/circles/a/users/42/circles/b/users/42/circles/c/users/42等等,然后合并结果以显示最大的可用信息量。显然,没有一个圆圈能得到任何其他圆圈所得到的所有信息。我认为这已经够棘手的了(请注意,我可能需要用几种对象来完成这个任务,而未来的版本可能需要一个不同的过程),但是如果我想对某个特定的用户施加安全限制,尽管也在我的一些圈子里,那该怎么办呢?这个问题还能解决吗?即使我拒绝回答上面提到的任何一个问题,并想出一个新的问题可以给我一个答案,它仍然会揭示这样一个事实,即这个特定的用户由于个人访问限制而受到不同的对待。

我在这里错过了什么?我甚至可以开发一个RESTful web服务吗?

如果得出的结论是,这种行为不是RESTful,那么这是否仍然构成一种情况,即违反其余契约在道德上是可以的?如果是的话,其负面影响是什么?例如,我是否要冒代理缓存问题的风险?

EN

回答 2

Stack Overflow用户

发布于 2012-09-21 21:32:49

根据菲尔丁的论文(这确实是一篇伟大的文章):

资源是对一组实体的概念映射,而不是在任何特定时间点对应于映射的实体。

换句话说,如果您的资源被定义为“请求用户的已分配项目”及其表示,则不会违反REST的任何约束,当用户A和用户B获得相同的URI时,返回一个项目列表(即表示)和另一个项目列表(表示)。这样,界面是一致的/一致的。

此外,REST只规定在响应中包含一个显式缓存指令,无论它是“缓存用于这个长时间”还是“根本不缓存”:

缓存约束要求对请求的响应中的数据被隐式或显式地标记为可缓存或不可缓存。

你选择如何管理这取决于你自己。

记住这一点,

如果您不违反统一接口的约束,那么您应该可以轻松地返回资源的表示,该表示形式取决于请求特定资源表示的用户--不要使用单个资源标识符来返回不同资源的表示。

如果有帮助,请考虑服务器以不同的资源表示形式进行响应-- XML或JSON、法语或英语等。与请求一起发送的凭据只是服务器在确定要发送哪种表示以响应时可以使用的另一个因素。这就是标题部分的意义所在。

票数 31
EN

Stack Overflow用户

发布于 2012-06-20 04:59:44

我同意另一个解决办法似乎不对。这使得URL结构更加复杂,资源查找更加困难。但是,如果您正确地休息了,那么在服务器控制资源时,资源的URL应该是什么(并且可以随意地对其进行适当的重新定位)。如果您的客户真的是"REST",它将通过事先与服务器的协商来发现所需的资源。因此,这条路在客户端上并不重要。我不喜欢它,因为它混淆了使用-不是因为一些违反REST原则。

但是,这可能没有回答您的问题--您没有提到的是您的安全设置--假设您是将请求作为请求头的一部分传递的会话令牌。因此,后端处理应该能够将其绑定到特定的安全约束集。在那里,您使用所需的任何业务逻辑组成列表,并根据与会话相关的用户的安全性返回有限的资源。

对于算法本身,通常实现最小或最严格的类型算法,将允许的数据合并到响应中(非常类似于java领域或Microsoft的用户安全模型)。

如果对于受限/非受限情况,数据的结构是不同的,则可以创建数据的两种不同的表示形式,并返回用户授权查看的数据。无论如何,客户机应该请求接受的mime响应类型,并且它只会根据请求头中的会话安全性提供不同的答案。或者,您可以提供带有表示的可选元素,并在授权的基础上填写适当的元素(尽管在我看来,这是一个小问题)。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10996328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档