如果您有一个REST API,即hypermedia-driven (hypermedia-driven),您可以通过在响应(_links)中包含或省略链接来轻松地更改客户端的行为。这使客户端完全忘记了测试resource当前状态下可能的操作的权限(是否存在到操作的链接)。
此外,如果当前用户没有查看该属性的权限,则可以在响应中省略属性。
通过这种方式,授权完全在服务器上完成(并控制符合执行/视图条件的操作和属性)。
但是,如果我想拥有一个read-only属性呢?如果REST API存在于请求中(_POST_或_PUT_),则忽略该属性是没有问题的。就是救不了你。但是,客户端如何区分写属性和只读属性,以显示用户适当的控件(如HTML中禁用的输入字段)?
目标是永远不要让client request拥有用户的权限,而是拥有一个完全由资源驱动的client/frontend。
如有任何帮助,将不胜感激:)
发布于 2015-07-25 19:01:02
如果我误解了你的问题,我先道歉。既然这么说..。
但是,客户端如何区分写属性和只读属性,以显示用户适当的控件(如HTML中禁用的输入字段)
对此有多种解决方案。我个人能想到的最简单的方法是使每个属性成为一个具有以下简单结构的对象:
...
someProperty: {
value: 'some value',
access: 'read-only'
},
someOtherProperty: {
value: 'some value',
access: 'write'
}
...显然,通过如何表示属性的“访问”级别(使用枚举、布尔值、将access更改为isReadOnly等),您可以获得任意的创造性。
在那之后,使用API的人现在知道他们是只读的还是非只读的。如果他们提交一个“只读”属性的“写”值作为POST有效负载的一部分,那么他们应该期望得到一个403响应。
编辑:如果您不能以这种方式更改属性,还有许多其他方法可以做到这一点:
最后,您只需要一种方法来映射具有访问级别的属性。然而,这取决于您对api的限制和需求,您可以进行哪些更改,以及您的客户端和业务需求都可以接受什么。
https://stackoverflow.com/questions/31593955
复制相似问题