CustomPermissionEvaluator с базой данных - PullRequest
0 голосов
/ 24 сентября 2019

CustomPermissionEvaluator с базой данных.На контроллере или службе REST я хотел бы установить custim Spring Security @preauthorize для проверки доступа к методу в соответствии с правами пользователя.

Право пользователя - это мое приложение для доступа к ресурсу (странице, службе и т. Д.)...) являются специфическими и обрабатываются базой данных вызовов службы абилитации .... Они не загружаются в userDetails.

Итак, как я могу сделать для настройки CustomPermissionEvaluator и нужно ли мне загружать разрешения при входе илипозвоните моим службам в оценщик.

@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true, proxyTargetClass = true)
public class ContextSecurityConfiguration {

    @Bean
    public PermissionEvaluator functionPermissionEvaluator() {
        return new XxxPermissionEvaluator ();
    }

    @Bean
    protected DefaultMethodSecurityExpressionHandler defaultMethodSecurityExpressionHandler() {
        DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
        expressionHandler.setPermissionEvaluator(this.functionPermissionEvaluator());
        return expressionHandler;
    }
}

Evaluator

@Component
public class XxxPermissionEvaluator implements PermissionEvaluator {

    @Autowired
    private ApplicationContext applicationContext;

    @Override
    public boolean hasPermission(Authentication authentication, Object entity, Object permission) {
        Optional<String> optionalUserId = SecurityUtils.getCurrentUserLogin(authentication);
        return optionalUserId.map(userId -> {
            EntityValidatorFactory entityValidatorFactory = applicationContext.getBean(EntityValidatorFactory.class);
            EntityValidator entityValidator = entityValidatorFactory.get(entity);
            return entityValidator.isUserAllowedToEntity(userId, entity, (String) permission);
        }).orElse(false);
    }

    @Override
    public boolean hasPermission(Authentication authentication, Serializable serializable, String s, Object o) {
        throw new PrimaClaimsRuntimeException("hasPermission is not implemented.");
    }
}

Мой pb - это мой пользовательский оценщик, который вызывает службу базы данных, которую он должен внедрить.Или это немного странно в классе конфигурации, чтобы внедрить службу и т. Д. ... сканировать еще, где при той же конфигурации

Так что вызов службы - это хороший способ загрузить разрешение на Вход в userDetail ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...