package ee.esutoniagodesu.config;
import ee.esutoniagodesu.security.AuthoritiesConstants;
import ee.esutoniagodesu.security.permission.CustomPermissionEvaluator;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.access.expression.method.DefaultMethodSecurityExpressionHandler;
import org.springframework.security.access.expression.method.MethodSecurityExpressionHandler;
import org.springframework.security.access.hierarchicalroles.RoleHierarchy;
import org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl;
import org.springframework.security.access.vote.RoleHierarchyVoter;
@Configuration
//@EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true)
public class MethodSecurityConfig {//extends GlobalMethodSecurityConfiguration {
//@Bean
public RoleHierarchyVoter roleHierarchyVoter() {
return new RoleHierarchyVoter(roleHierarchy());
}
//@Bean
public RoleHierarchy roleHierarchy() {
RoleHierarchyImpl rhi = new RoleHierarchyImpl();
rhi.setHierarchy(
AuthoritiesConstants.ADMIN + " > " + AuthoritiesConstants.USER + " " +
AuthoritiesConstants.USER + " > " + AuthoritiesConstants.ANONYMOUS
);
return rhi;
}
//@Bean
public CustomPermissionEvaluator permissionEvaluator() {
return new CustomPermissionEvaluator();
}
//@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
//expressionHandler.setPermissionEvaluator(permissionEvaluator());
expressionHandler.setRoleHierarchy(roleHierarchy());
return expressionHandler;
}
}