CRNK-фильтрация свойств дочерних объектов - PullRequest
0 голосов
/ 09 марта 2020

Мы используем CRNK для предоставления json версий классов домена и внедрили ResourceFilter, который переопределяет метод filterField по умолчанию, так что доступ к определенным полям может быть ограничен. Это прекрасно работает для свойств сущности верхнего уровня, но для дочерних свойств метод не вызывается.

Например, нижеприведенная сущность Candidate содержит объект PersonalDetails. Метод Fields фильтра будет вызываться для свойства Candidate «personal-details», но не для каких-либо свойств объекта PersonalDetails, таких как «name-name». Есть ли какая-либо конфигурация или аннотация, которую можно использовать, чтобы имя также передавалось методу поля фильтра?

В идеале можно было бы запретить пользователю видеть поле имени, в то же время получая поле фамилии в личных данных.

Candidate и PersonalDetails:

@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;
    }
...