package br.gov.servicos.editor.security; import br.gov.servicos.editor.conteudo.TipoPagina; import br.gov.servicos.editor.usuarios.Usuario; import org.springframework.context.annotation.Profile; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.stereotype.Component; import static br.gov.servicos.editor.config.SlugifyConfig.slugify; import static br.gov.servicos.editor.security.TipoPermissao.CADASTRAR_OUTROS_ORGAOS; @Component @Profile("!teste") public class LoginUserProfiles implements UserProfiles { @Override public UserProfile get() { Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); if (!(principal instanceof Usuario)) { return new UserProfile(); } Usuario usuario = (Usuario) principal; return new UserProfile() .withId(usuario.getEmailPrimario()) .withEmail(usuario.getEmailPrimario()) .withName(usuario.getNome()) .withPermissoes(usuario.getAuthorities()) .withSiorg(usuario.getSiorg()); } @Override public boolean temPermissaoParaOrgao(TipoPermissao permissao, String orgaoId) { return getPrincipal().temPermissaoComOrgao(permissao, orgaoId); } @Override public boolean temPermissaoParaTipoPagina(TipoPermissao tipoPermissao, TipoPagina tipoPagina) { return getPrincipal().temPermissao(tipoPermissao.comTipoPagina(tipoPagina)); } public boolean temPermissaoParaCriarAdmin() { return getPrincipal().temPermissao(TipoPermissao.CADASTRAR.comPapel("ADMIN")); } @Override public boolean temPermissaoGerenciarUsuarioOrgaoEPapel(String siorg, String papel) { Usuario usuario = getPrincipal(); return usuario.temPermissao(TipoPermissao.CADASTRAR.comPapel(papel.toUpperCase())) && (usuario.getSiorg().equals(siorg) || usuario.temPermissao(CADASTRAR_OUTROS_ORGAOS.getNome())); } @Override public boolean temPermissaoParaTipoPaginaOrgaoEspecifico(TipoPermissao tipoPermissao, TipoPagina tipoPagina, String unsafeOrgaoId) { String userSiorgId = slugify(getPrincipal().getSiorg()); String orgaoId = slugify(unsafeOrgaoId); return temPermissao(tipoPermissao.comTipoPaginaParaOrgaoEspecifico(tipoPagina)) && userSiorgId.equals(orgaoId); } @Override public boolean temPermissao(String permissao) { return getPrincipal().temPermissao(permissao); } @Override public String getSiorg() { return getPrincipal().getSiorg(); } private Usuario getPrincipal() { return (Usuario) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); } }