Criando novas funções e autoridades no JHipster

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.