我们正在使用CRNK提供域类的json版本,并实现了一个ResourceFilter,它重写了默认的filterField方法,以便可以限制对某些字段的访问。对于顶级实体上的属性,这很好用,但对于子属性,则不调用该方法。
例如,下面的“候选”实体包含一个PersonalDetails对象。将为Candidate属性“ personal-details”调用filter Fields方法,但不会为PersonalDetails对象中的任何属性(如“ first-name”)调用。是否可以使用某些配置或注释,以便将名字也传递给filter字段方法?
理想情况下,有可能阻止用户查看姓氏字段,同时仍在个人详细信息中接收姓氏字段。
候选人和个人详细信息:
@Getter
@Setter
@JsonApiResource(type = "candidate", resourcePath = "candidates")
public class Candidate {
@JsonApiId
private Long id;
@JsonProperty("personal-details" )
private PersonalDetails personalDetails;
}
@Getter
@Setter
public class PersonalDetails {
@JsonProperty("first-name")
private String firstName;
@JsonProperty("last-name")
private String lastName;
}
资源过滤器:
public FilterBehavior filterField(ResourceFilterContext filterContext, ResourceField field, HttpMethod method){
FilterBehavior filterBehavior = FilterBehavior.FORBIDDEN;
if (fieldService.hasFieldAccess(field.getJsonName(), method.toString())) {
filterBehavior = FilterBehavior.NONE;
}
return filterBehavior;
}