如果您的REST API
是hypermedia-driven
(HATEOAS),您可以通过在响应中包含或省略链接来轻松更改客户的行为( _links
)。这使客户端可以完全忘记测试resource
当前状态下可能执行的操作的权限(操作的链接是否存在)。
此外,如果当前用户没有权限查看,您可以在回复中遗漏属性。
这样,授权完全在服务器上完成(并控制有资格执行/查看的操作和属性)。
但是如果我想拥有 read-only
属性怎么办? REST
API
如果请求(_POST_
或_PUT_
)中存在属性,则忽略该属性是没有问题的。它只是赢得了保存。但客户端如何区分 write 和只读属性以向用户显示适当的控件(如HTML
中的禁用输入字段)?
目标是永远不会拥有client request
用户的权限,但拥有完全由资源驱动的client/frontend
。
非常感谢任何帮助: - )
答案 0 :(得分:0)
如果我误解了你的问题,我会提前道歉。有了这样说......
但客户如何区分写和只读 用于向用户显示适当控件的属性(如禁用 HTML中的输入字段
嗯,这有多种解决方案。我个人可以想到的最简单的方法是使每个属性成为具有如下结构的简单结构的对象:
...
someProperty: {
value: 'some value',
access: 'read-only'
},
someOtherProperty: {
value: 'some value',
access: 'write'
}
...
您可以使用如何表示属性的“访问”级别(使用枚举,布尔值,将access
更改为isReadOnly
或其他)来显示您想要的创意。
之后,使用API的人现在知道他们是只读的。如果他们为“只读”属性提交“写入”值作为POST有效负载的一部分,那么他们应该期望得到403响应。
编辑: 如果您无法以这种方式更改属性,还有许多其他方法可以实现此目的:
当天结束时,您只需要一种方法来映射具有访问级别的属性。但是,这完成取决于您对api的限制和要求,您可以做出哪些更改,以及您的客户和业务要求可接受的内容。