Criando novas funções e autoridades no JHipster
1. Visão geral
JHipster vem com duas funções padrão - USUÁRIO e ADMINISTRADOR - mas às vezes precisamos adicionar a nossa própria.
Neste tutorial, criaremos uma nova função chamada MANAGER que podemos usar para fornecer privilégios adicionais a um usuário.
Observe queJHipster uses the term authorities somewhat interchangeably with roles. De qualquer maneira, queremos dizer essencialmente a mesma coisa.
2. Alterações de código
A primeira etapa para criar uma nova função éupdate the class AuthoritiesConstants. Este arquivo é gerado automaticamente quando criamos um novo aplicativo JHipster e contém constantes para todas as funções e autoridades no aplicativo.
Para criar nossa nova função de GERENTE, simplesmente adicionamos uma nova constante neste arquivo:
public static final String MANAGER = "ROLE_MANAGER";
3. Alterações de esquema
O próximo passo é definir a nova função em nosso armazenamento de dados.
O JHipster suporta uma variedade de repositórios de dados persistentes e cria uma tarefa de configuração inicial que preenche o repositório de dados com usuários e autoridades.
Para adicionar uma nova função à configuração do banco de dados,we must edit the InitialSetupMigration.java file. Ele já tem um método chamadoaddAuthorities, e simplesmente adicionamos nossa nova função ao código existente:
public void addAuthorities(MongoTemplate mongoTemplate) {
// Add these lines after the existing, auto-generated code
Authority managerAuthority = new Authority();
managerAuthority.setName(AuthoritiesConstants.MANAGER);
mongoTemplate.save(managerAuthority);
}
Este exemplo usa o MongoDB, mas as etapas são muito semelhantes às outras lojas persistentes suportadas pelo JHipster.
Note that some data stores, such as H2, rely solely on a file named authorities.csv, e, portanto, não tem nenhum código gerado que requer atualização.
4. Usando nosso novo papel
Agora que temos uma nova função definida, vamos ver como usá-la em nosso código.
4.1. Código Java
No back-end, existem duas maneiras principais de verificar se um usuário tem autoridade para executar uma operação.
Primeiro,we can modify SecurityConfiguration se quisermos limitar o acesso a uma API específica:
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/management/**").hasAuthority(AuthoritiesConstants.MANAGER);
}
Em segundo lugar,we can use SecurityUtils anywhere in our application para verificar se um usuário está em uma função:
if (SecurityUtils.isCurrentUserInRole(AuthoritiesConstants.MANAGER)) {
// perform some logic that is applicable to manager role
}
4.2. A parte dianteira
O JHipster fornece duas maneiras de verificar as funções no front-end. Observe que esses exemplos usam Angular, mas existem construções semelhantes para React.
Primeiro,any element in a template can use the *jhiHasAnyAuthority directive. Ele aceita uma única string ou matriz de strings:
Em segundo lugar,the Principal class can check se um usuário tiver uma função específica:
isManager() {
return this.principal.identity()
.then(account => this.principal.hasAnyAuthority(['ROLE_MANAGER']));
}
5. Conclusão
Neste artigo, vimos como é simples criar novas funções e autoridades no JHipster. Embora as funções padrão de USUÁRIO e ADMIN sejam um excelente ponto de partida para a maioria dos aplicativos, as funções adicionais fornecem mais flexibilidade.
Com funções adicionais, temos maior controle sobre quais usuários podem acessar APIs e quais dados eles podem ver no front-end.
Como sempre, o código está disponível emGitHub.