CRNK过滤子实体属性

时间:2020-03-09 17:21:27

标签: java spring-boot crnk

我们正在使用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;
    }

0 个答案:

没有答案