package br.gov.servicos.editor.security; import br.gov.servicos.editor.usuarios.Usuario; import com.google.common.collect.HashMultimap; import com.google.common.collect.Multimap; import lombok.AccessLevel; import lombok.experimental.FieldDefaults; import lombok.experimental.NonFinal; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.config.YamlPropertiesFactoryBean; import org.springframework.stereotype.Component; import java.util.Collection; @Component @FieldDefaults(level = AccessLevel.PRIVATE, makeFinal = true) public class GerenciadorPermissoes implements InitializingBean { @NonFinal Multimap<String, Permissao> map; YamlPropertiesFactoryBean properties; @Autowired public GerenciadorPermissoes(YamlPropertiesFactoryBean properties) { this.properties = properties; } @Override public void afterPropertiesSet() { map = HashMultimap.create(); properties.getObject().forEach((papel, permissao) -> map.put(parsePapel(papel), new Permissao(permissao.toString().toUpperCase()))); Usuario.setGerenciadorPermissoes(this); // necessário porque Usuario não é uma classe Spring } private String parsePapel(Object papelObj) { String papel = (String) papelObj; if (!papel.matches("[\\w\\s]+\\[\\d+\\]")) { throw new RuntimeException("Formato incorreto do arquivo de permissões. Problema com o papel: " + papel); } return papel.split("\\[")[0].toUpperCase(); } public Collection<Permissao> getPermissoes(String editor) { return map.get(editor.toUpperCase()); } }