我要求调用者限制REST响应中的属性。考虑JSON格式的响应。
Ex:对于给定的REST端点,默认响应类似于
{
"id" : "111"
"name" : "John"
"age" : "30"
}
对于"来电者1"响应应该像
{
"id" : "111"
"name" : "John"
"age" : "null"
}
对于"来电者2"响应应该像
{
"id" : "111"
"name" : "null"
"age" : "30"
}
在上面的响应JSON中," null"意味着,这些属性不会暴露给此类呼叫者。
我正在寻找一种实现控制器响应REST响应的方法。
答案 0 :(得分:5)
服务器端的实现严重依赖于底层服务器技术堆栈(REST API,DB,用户的角色层等)。在某些配置中,您在REST层中定义数据授权,而在REST层中定义其他数据授权。 实现字段级授权是一个棘手的问题,因为并非所有框架都提供这种粒度。
提供这种粒度的一个框架是Jello Framework(我是作者)。 Jello的主要功能之一是其内联授权模型,您可以在任何分辨率(命名空间,实体,字段,操作)为数据元素分配不同的访问级别,并指定谁有权通过REST API访问数据。
例如 - 我们假设你想揭露“年龄”。仅对记录所有者和站点管理员字段。在Jello中,它看起来像这样:
public class Person extends JelloEntity {
@Expose @KeyElement
Integer id;
@Expose
String name;
@Expose({Role.OWNER, Role.ADMIN})
Integer age;
}
答案 1 :(得分:1)
我过去有类似的要求,其中权限在字段级别是精细的。
我为每个实体实现了Rest响应编写器。我传递了调用用户有权访问的该实体的字段列表。使用列表,在响应编写器中,我过去只输出用户有权访问的字段。
我曾经从实体输出地图/列表结构。杰克逊随后将结构编组为JSON。