Page tree
Skip to end of metadata
Go to start of metadata

O sistema de permissões de segurança é um mecanismo de autorização e autenticação de usuários. Dessa forma, é possível definir regras de acessos a usuários ou grupos de usuários, além de permitir múltiplas formas de efetuar o login no sistema, utilizando as informações contidas no Banco de Dados ou um provedor de login externo. Os provedores de login externo suportados incluem o Active DirectoryLDAP, SAML, OpenID-connect, Facebook, Google, Microsoft Account, Twitter, Github, Certificados digitais e ICP Brasil, podendo também ser personalizado para qualquer provedor de login externo compatível com OAuth 2.0.


Figura 1.1 - Acesso a funcionalidade Permissão de Segurança


Para abrir, acesse no menu do sistema Projeto > Permissão de Segurança, como na figura 1.1. 

Quando usar

A funcionalidade Permissão de Segurança deve ser usada para cadastrar as permissões, grupos de usuários e usuários que irão alimentar o sistema assim que ele for executado pela primeira vez, criando uma base de dados inicial. Após essa etapa, não é mais necessário o seu uso. 

Na prática, sempre que alteramos as Permissões de segurança, alimentamos o arquivo populate,json, responsável por preencher o banco de dados no primeiro carregamento do sistema. Acesse o tópico Estrutura de Classes para mais detalhes.

Funcionalidade

A funcionalidade Permissão de Segurança possui 3 abas: Permissionáveis (Securable), Grupos (Role) e Usuários (User). Essa estrutura possui uma pequena hierarquia, onde um permissionável possui as permissões do sistema e é composto por usuários e grupos de usuários; um Grupo, possui um ou mais usuários e pode estar associado a um ou mais permissionáveis e o Usuário pode estar dentro de um ou mais grupos e estar diretamente vinculado a um ou mais permissionáveis. A figura 2.1 representa essa estrutura.


Figura 2.1 - Usuários podem estar associados a grupos ou diretamente a permissionáveis


Usuários vinculados a mais de um permissionável terá o acesso do permissionável de maior abrangência. Por exemplo, se um usuário estiver associado a dois permissionáveis, através de grupos ou diretamente, sendo que o primeiro permissionável concede acesso a parte do sistema e no segundo possua acesso completo, ao logar, esse usuário terá acesso total. 

Aba Permissionáveis

Cada permissionável possui um conjunto de permissões aos métodos de requisição HTTP de uma página ou de todas as páginas contidas em um diretório. 

Por padrão, os projetos criados no Cronapp já incluem os seguintes permissionáveis:

  • Administrators: acesso a todo o conteúdo do sistema, incluindo as páginas do diretório admin;
  • Authenticated: acesso ao conteúdo da pasta logged;
  • Public: acesso ao conteúdo da pasta public e demais arquivos necessários para que o usuário não logado possa visualizar o conteúdo público.

Para adicionar um novo permissionável, clique no ícone "+" (destaque 1 da figura 2.2) para informar um nome e salvar um novo registro.


Figura 2.2 - Inserindo novo permissionável


  1. Adicionar: abre a janela para inserir novo item;
  2. Atualizar: recarrega a lista.


Após inserir, clique no ícone Editar (destaque 1 da figura 2.3) para abrir a janela de Edição, que agora possui 4 abas: Geral, Visões, Grupos e Usuários.


Figura 2.3 - Exemplo de configuração da tela de login


  1. Editar permissionável: Abre a janela de edição.
  2. Aba Geral: edita o nome do permissionável (Figura 2.2).
  3. Aba Visões: permite selecionar as views que esse permissionável terá acesso.
  4. Aba Grupos: adiciona grupos ao permissionável. Essa aba só permite inserir grupos adicionados a partir aba principal Grupos e que foram criados em tempo de desenvolvimento.
  5. Aba Usuários: adiciona usuários ao permissionável. Essa aba só permite inserir usuários adicionados a partir aba principal Usuários e que foram criados em tempo de desenvolvimento.
  6. Inserir visão: abre a janela para informar um endereço e selecionar os métodos HTTP.
  7. Recarregar visão: recarrega a lista.
  8. Coluna Padrão: lista todos os endereços já cadastrados.
  9. Editar: abre a janela para editar o endereço e alterar os métodos de requisição HTTP.
  10. Excluir: apaga o endereço selecionado.
  11. Campo Padrão: endereço que terá as permissões concedidas. Informe um conteúdo ou todo o conteúdo de um diretório, inserindo o "**" ao final (ex: /views/<diretório>/**).
  12. Métodos HTTP: define os métodos de requisição HTTP autorizados para essa página ou conjunto de páginas.

Aba Grupos

Um grupo pode conter diversos usuários, e esses usuários herdarão automaticamente os acessos dos permissionáveis dos quais esse grupo pertença. Dessa forma, um grupo é considerado um papel ou função, já que pode possuir as regras necessárias para que o usuário associado execute seu papel e acesse suas funções dentro do sistema, exemplo: Vendedor, Gerente, Gestão de pessoas.  

Por padrão, os projetos criados no Cronapp já incluem os seguintes Grupos:

  • Anonymous Users: associado ao permissionável Public;
  • Authenticated Users: associado ao permissionável Authenticated;
  • Administrators: associado ao permissionável Administrators.

Para criar um grupo, clique no ícone "+" (destaque 1 da figura 2.4) para informar seu nome. Após salvar, clique no ícone Editar (destaque 3 da figura 2.4) para abrir a janela de Edição, que agora, além da aba Geral exibirá a aba Usuários.


Figura 2.4 - Edição do grupo Administrators


  1. Adicionar: abre a janela para inserir novo grupo.
  2. Atualizar: recarrega a lista.
  3. Editar grupo: abre a janela de edição.
  4. Excluir: apaga o grupo selecionado.
  5. Aba Geral: edita o nome do grupo.
    • Campo Nome;
    • Pode ter membros: se ativo, o grupo poderá ter usuários associados; 
    • Grupo pré-definido: quando ativo, não permite que o grupo seja editado em tempo de execução.
  6. Aba Usuários: adiciona usuários ao grupo. Essa aba só permite inserir usuários adicionados a partir aba principal Usuários e que foram criados em tempo de desenvolvimento.

Aba Usuários

Essa aba permite criar os usuários que irão alimentar o sistema em sua primeira execução. 

Por padrão, os projetos criados no Cronapp incluem o seguinte usuário:

  • Administrator: esse usuário já vem associado ao grupo Administrators, tendo todas os acessos do permissionável Administrators.
    Para logar com o usuário Administrador, informa o usuário e senha "admin".

 

Figura 2.5 - Inserindo um novo usuário


  1. Adicionar: abre a janela para inserir novo usuário.
  2. Atualizar: recarrega a lista de usuários.
  3. Editar grupo: Abre a janela de edição.
  4. Excluir: apaga o grupo selecionado.
  5. Aba Geral: possui os campos para cadastro de usuários.

Atribuindo permissões

Após a criação dos permissionáveis, é possível definir as permissões de cada local dentro do sistema e atribuir permissões para os usuários.

Em desenvolvimento

O Cronapp permite restringir a visualização e/ou acesso a diferentes partes do sistema, como componentes visuais mobile ou web, fontes de dados, relatórios, tabelas e campos de tabelas e muito mais. No exemplo da figura 3.1, somente os usuários com os permissionáveis Administradores e Vendas poderão visualizar e utilizar o componente Barra de navegação da página em edição.


Figura 3.1 - Restringindo o acesso de um componente visual


Já no exemplo da figura 3.2, somente usuários autenticados terão acesso para executar esse bloco de programação servidor. Útil para disponibilizar serviço Rest via bloco de programação.


Figura 3.2 - Limitando acesso a um bloco de programação servidor

Em execução

Após logar com o perfil de administrador na aplicação, é possível visualizar o menu ADMIN, que dá acesso as páginas Usuários e Funções (Grupos). Através delas será possível definir permissionáveis aos grupos (página Funções) ou permissionáveis e grupos aos usuários (Página Usuários). 


Figura 3.3 - Menu Administrativo do sistema


Ao criar ou editar um usuário do sistema, é possível definir um grupo através do campo Função ou selecionar diretamente um Permissionável (Figura 3.4).


Figura 3.4 - Na edição do usuário é possível definir grupos (Funções) ou Permissionável


Ao acessar a página Funções, é possível criar e editar grupos, vinculando-os a permissionáveis e definindo seus usuários (Figura 3.5).


Figura 3.5 - Seleção de permissionáveis e usuários na edição da Função (grupo)

Estrutura de Classes

Por padrão, o sistema de permissões e segurança armazena informações de usuário em um banco de dados usando o JPA. Essa abordagem funciona bem para muitos aplicativos. No entanto, você pode preferir usar um mecanismo de persistência ou esquema de dados diferente, dessa forma, é possível tornar o modelo extensível e personalizável.

Na figura abaixo são exibidas as classes usadas na Permissão de Segurança.

Dependendo das configurações do seu projeto, outras duas classes também serão exibidas: AuditLog (Log de auditoria) e Device (Dispositivos móveis).


Figura 4.1 - Diagrama de dados inicial de um sistema Cronapp


O modelo de dados das permissões de segurança consiste dos seguintes tipos de entidade (Figura 4.1):

Nome da Entidade

Descrição

UserRepresenta um usuário.
RoleRepresenta um grupo (função).
LoginRepresenta logins de provedores externos para um usuário. 
SecurableRepresenta um permissionável.
View

Representa um objeto do tipo View ao qual você quer aplicar controle de acesso através dos métodos de requisição HTTP.

RoleSecurableAssocia grupos e permissionáveis, permitindo que todos os usuários contidos em um grupo tenham permissão ao conjunto de acessos do permissionável.

UserSecurable

Associa usuários e permissionáveis, permitindo que o usuário tenha permissão diretamente ao conjunto de acessos do permissionável.

UserRoleAssocia um usuário a um grupo (função).

Relacionamentos entre entidades

Os tipos de entidade são relacionados entre si das seguintes formas:

  • Cada User pode ter múltiplos Securables associados, e cada Securable pode estar associado a múltiplos Users. Esse relacionamento muitos-para-muitos é representado pela entidade UserSecurable.
  • Cada User pode ter múltiplos Logins associados.
  • Cada User pode ter múltiplos Roles associados, e cada Role pode estar associada a múltiplos Users. Esse relacionamento muitos-para-muitos é representado pela entidade UserRole.
  • Cada Role pode ter múltiplos Securables associados, e cada Securable pode estar associado a múltiplos Roles. Esse relacionamento muitos-para-muitos é representado pela entidade RoleSecurable.
  • Cada Securable pode ter múltiplos Views associados.

Tabelas

Abaixo são detalhados todos os campos das tabelas usadas pelo Sistema de Segurança.

User

Coluna do BancoTipoFunção
id  TextoChave primária.
access_failed_count  InteiroNúmero de falha de acesso seguidos.
email  TextoE-mail do usuário.
email_confirmed  LógicoConfirmação se o e-mail foi validado.
lockout_enabled  LógicoUsuário bloqueado para acesso ao sistema.
lockout_end  Data e HoraHorário que o usuário será desbloqueado para acessar o sistema.
name  TextoNome do usuário.
normalized_email  TextoCria uma cópia normalizada do email do usuário, garantindo que o usuário possa ter e-mail com caracteres especiais.
normalized_user_name  TextoCria uma cópia normalizada do user_name, garantindo que o usuário possa ter um login com caracteres especiais.
password  TextoSenha do usuário.
phone_number  TextoNúmero de telefone.
phone_number_confirmed  LógicoConfirmação se o telefone foi validado.
security_stamp  TextoUsado para rastrear as alterações feitas no perfil do usuário. É usado para fins de segurança quando as propriedades importantes de um usuário são alteradas, como a alteração da senha.
two_factor_enabled  LógicoHabilita a autenticação de dois fatores.
user_name  TextoLogin do usuário.
themeImagem no BancoTema escolhido pelo usuário.
picture  TextoFoto do usuário.

Role

Grupo ou Função.

Coluna do BancoTipoFunção
id  TextoChave primária.
builtin  LógicoO registro só pode ser alterado em tempo de desenvolvimento.
membership_enabled  LógicoNovos membros podem ser inseridos no grupo (função).
name  TextoNome do grupo (função).
normalized_name  TextoCria uma cópia normalizada do nome do grupo (função), permitindo que o nome tenha com caracteres especiais.

Login

A entidade Login garante que um mesmo usuário possa logar com diferentes contas. Por exemplo, um usuário pode logar e acessar na sua conta do sistema usando sua conta do Facebook, Gmail ou do próprio sistema, essa última é gravada diretamente na tabela User.

Coluna do BancoTipoFunção
id  TextoChave primária.
login_provider  TextoProvedor da autenticação externa.
provider_display_name  TextoLogin do usuário no provedor externo,
provider_key  TextoSenha do usuário no provedor externo.
user_id  TextoChave estrangeira da tabela User.

Securable

Permissionável.

Coluna do BancoTipoFunção
id  TextoChave primária.
nameTextoNome do permissionável.

View

Aplica o controle de acesso aos métodos de requisição HTTP.

Coluna do BancoTipoFunção
id  TextoChave primária.
securable_id  TextoChave estrangeira da tabela Securable.
pattern  TextoPágina ou local com o controle de acesso.
getMethodAllowed  LógicoPermissão para o método get.
headMethodAllowed  LógicoPermissão para o método head.
putMethodAllowed  LógicoPermissão para o método put.
postMethodAllowed  LógicoPermissão para o método post.
patchMethodAllowed  LógicoPermissão para o método patch.
deleteMethodAllowed  LógicoPermissão para o método delete.
optionsMethodAllowed  LógicoPermissão para o método options.
traceMethodAllowed  LógicoPermissão para o método trace.

Role Securable

Tabela de relacionamento entre Grupo e Permissionável.

Coluna do BancoTipoFunção
id  TextoChave primária.
role_id TextoChave estrangeira da tabela Role.
securable_idTextoChave estrangeira da tabela Securable.

User Securable

Tabela de relacionamento entre Usuário e Permissionável.

Coluna do BancoTipoFunção
id  TextoChave primária.
securable_id  TextoChave estrangeira da tabela Securable.
user_id  TextoChave estrangeira da tabela User.

User Role

Tabela de relacionamento entre Usuário e Grupo.

Coluna do BancoTipoFunção
id  TextoChave primária.
role_id  TextoChave estrangeira da tabela Role.
user_id  TextoChave estrangeira da tabela User.

Nesta página