2015-05-19 3 views
1

Я хотел использовать поддержку расширения безопасности Spring Data JPA для выполнения проверки полномочий пользователя и, соответственно, получения некоторых значений. Я пытаюсь сделать это указано иное hereВесенние данные JPA с оценкой безопасностиContextExtensionSupport не работает

Ниже мой код сниппета

@RepositoryRestResource(collectionResourceRel = "ProductStatus", path = "ProductStatus") 
    public interface IProductStatusRepository extends CrudRepository<ProductStatusEntity, String> { 
     @Query("SELECT p FROM ProductStatusEntity " + 
       "?#{hasAuthority('ITManager') ? ' ' : ' WHERE ProductStatusCode NOT IN (\'VAL1\',\'VAL2\',\'VAL3\')'}") 
     List<ProductStatusEntity> findStatusesByAuthority(); 
    } 

Я сделал объявить класс SecurityEvaluationContextExtension и securityExtension боб, просто копия вставки кода. Но все же, вышеуказанный фрагмент кода не работает.

Я всегда получаю

Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: ? 

Я попробовал несколько вариантов в игре вокруг с #,: #, hasRole, hasAuthority и т.д. Ничто не похоже на работу.

Любые мысли по этому поводу?

ответ

1

Ну это один работал после нескольких проб и ошибок

@Query("select p from ProductStatusEntity p where p.productStatusCode NOT IN (?#{hasAuthority('ITManager') ? ' ' : @settings.productStatusExceptions})") 
List<ProductStatusEntity> findStatusesByAuthority(); 

Проблема, кажется, что SPEL только признается, если существует ИНЕКЕ указано .. Возможно, это может быть улучшен .. не уверен. .

Смежные вопросы