Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

O sistema de permissões de segurança é um mecanismo de autorização 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 utilizando as informações contidas no Banco de Dados (padrão) ou um provedor de login externo. Os provedores de login externo suportados incluem o Active DirectoryLDAP, SAML SAML, OpenID-connect, Facebook, Google, Microsoft Account, Twitter, Login social (Github, Facebook, LinkedIn, Google e Cronapp), Certificados digitais e ICP Brasil, podendo também ser personalizado para qualquer provedor de login externo compatível com OAuth 2.0.

Image Removed

Figura 1.1 - Acesso a funcionalidade

Estrutura

A 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.

Image Removed

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.

Image Removed

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.

Image Removed

Figura 2.3 - Exemplo de configuração da pasta admin

  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 cadastrar ou editar 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. Abra a janela de busca para selecionar um diretório ou arquivo. O "**" ao final passa a mesma permissão para todo o conteúdo dentro do diretório (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.
ÂncoraabaGruposabaGrupos

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.

Image Removed

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.
ÂncoraabaUsuariosabaUsuarios

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".

 

Image Removed

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.

Image Removed

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.

Image Removed

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). 

Image Removed

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).

Image Removed

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).

Image Removed

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

Bloquear usuário

Para impedir que um usuário tenha acesso ao sistema, é possível remover a aplicação (Application) associada ao usuário na tabela ApplicationUser (mais detalhes em Multi Aplicações) caso a permissão de acesso seja explicita, ou retirar os grupos / funções (Roles) associadas ao usuário através da tabela (UserRoles).

O recomendado é que tenha apenas um grupo / função (Role) que dá permissão de acesso de um usuário a um sistema específico.

Dica
É importante destacar que toda permissão de acesso ao sistema é ignorada se o usuário for administrador geral, isto é, ele ter o permissionável (Securable) Administrator associado.
ÂncoraestruturaClassesestruturaClasses

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).

Image Removed

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).ApplicationUtilizado em sistemas com Multi Aplicações.ApplicationUserAssocia usuários e aplicações.

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. Acesse a documentação Multi Aplicações para informações sobre as tabelas Application e ApplicationUser.

ÂncoratabelaUsertabelaUser

User

Coluna do BancoTipoFunçãoid  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ógicoPermite que o mecanismo de segurança bloqueie o acesso do usuário (por exemplo, errar a senha várias vezes).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.

do Cronapp possui uma estrutura dividida em 3 camadas: 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, que pode estar dentro de um ou mais grupos e estar diretamente vinculado a um ou mais permissionáveis. A figura 1 representa essa estrutura.


Image Added

Figura 1 - Estrutura das permissões de segurança do Cronapp

Âncora
permissionavel
permissionavel

Permissionável

Cada permissionável possui um conjunto de permissões (métodos de requisição HTTP) que podem ser aplicadas em arquivos específicos ou todo o conteúdo dentro de um diretório. O acesso a arquivos é feito diretamente nas configurações do permissionável, porém, o Cronapp também utiliza a lista de permissionáveis do sistema para liberar acessos a recursos dentro de uma página, relatório, bloco de programação e diversas outras funcionalidades (veja exemplos no tópico Atribuir Permissões).

Por padrão, os projetos criados no Cronapp já incluem os seguintes permissionáveis: Public, Authenticated e Administrators. Os permissionáveis herdam permissões de outros permissionáveis, assim:

  • O permissionável Public possui as permissões mais básicas, como acesso ao conteúdo do diretório public e arquivos necessários para que os usuários não logados possam visualizar o conteúdo público, exemplo de arquivos CSS e tema da aplicação.
  • O permissionável Authenticated herda todas as permissões do permissionável Public e possui algumas permissões próprias, como acesso ao conteúdo do diretório views/logged/.

  • O permissionável Administrators herda todas as permissões do permissionável Authenticated e possui algumas permissões próprias, com acesso completo ao sistema e diretório views/admin/.

  • Todo os novos permissionáveis do sistema herdarão automaticamente as permissões do permissionável Authenticated.


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 o segundo possua acesso completo, ao logar, esse usuário terá acesso total. 

Alterar regras

É possível modificar as regras dos 3 permissionáveis padrão para que eles se adequem melhor as necessidades do seu sistema. Porém, é preciso ter bastante atenção ao fazer isso, pois podem abrir brechas para falhas de segurança. Além disso, essas alterações devem contemplar tanto a aplicação web quanto a mobile.

Em alguns casos, talvez seja prudente ter o permissionável Authenticated mais restrito, apenas com o que é realmente comum e criar permissionáveis com acessos bem específicos ao que aquele usuário ou grupo de usuários necessitarão dentro do sistema. Por exemplo, o permissionável “comprador” pode contemplar tudo o que é necessário para a funcionalidade, e se necessário, criar permissionáveis ainda mais específicos, como “Compradores - Escrita” e “Compradores - Leitura”.

Âncora
grupo
grupo

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.

Âncora
usuario
usuario

Usuários

Um usuário do sistema pode obter suas autorizações por estar associado a grupos ou diretamente a permissionáveis. Usuários criados sem vínculos com grupos ou permissionáveis receberá, de forma implícita, todas as regras do permissionável Authenticated

Por padrão, os projetos criados no Cronapp contêm o usuário:

  • Administrator: esse usuário já vem associado ao grupo Administrators, que por sua vez, está vinculado ao permissionável Administrators.

    Informações

    Para logar com o usuário Administrador, utilize o username e senha "admin". Após logar, recomendamos alterar a senha desse usuário.

Âncora
estruturaClasses
estruturaClasses

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. Entretanto, você pode preferir usar um mecanismo de persistência ou esquema de dados diferente, dessa forma, é possível alterar e tornar o modelo extensível e personalizável.

Na figura abaixo são exibidas as classes usadas na Permissão de Segurança do Cronapp. Dependendo das configurações do seu projeto, outras duas classes também serão exibidas: AuditLog (Log de auditoria) e Device (Dispositivos móveis) (acesse as documentações Diagrama e Log de Auditoria para mais detalhes sobre essas duas classes).


Image Added

Figura 1.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 1.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.

ApplicationRepresenta uma aplicação, utilizado em sistemas com multi aplicações.
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).
ApplicationUserAssocia usuários e aplicações, utilizado em sistemas com multi aplicações.

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.

Relacionamentos para Multi Aplicações

Os relacionamentos abaixo são específicos para a utilização de Multiplas aplicações dentro da mesma base de dados, para isso são utilizadas as tabelas Application e ApplicationUserOs tipos de entidade são relacionados entre si das seguintes formas:

  • Cada Application pode ter múltiplos Role associados.
  • Cada Application pode ter múltiplos Securable associados.
  • Cada Application pode ter múltiplos View associados.
  • Cada Application pode ter múltiplos User associados, e cada User pode estar associado a múltiplos Application. Esse relacionamento muitos-para-muitos é representado pela entidade ApplicationUser.

Tabelas

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

Âncora
tabelaUser
tabelaUser

User

Usuário.

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ógicoPermite que o mecanismo de segurança bloqueie o acesso do usuário (por exemplo, errar a senha várias vezes).
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.

Âncora
tabelaRole
tabelaRole

Role

Grupo.

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

Âncora
tabelaLogin
tabelaLogin

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.

Âncora
tabelaSecurable
tabelaSecurable

Securable

Permissionável.

Coluna do BancoTipoFunção
id  TextoChave primária.
nameTextoNome do permissionável.
applicationTextoChave estrangeira da tabela Application.

Âncora
tabelaView
tabelaView

View

Aplica o controle de acesso (métodos de requisição HTTP) à diretórios e arquivos.

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.
applicationTextoChave estrangeira da tabela Application.

Âncora
tabelaApplication
tabelaApplication

Application

Aplicações. Ver mais detalhes em Multi aplicações.

Coluna do BancoTipoFunção
id  TextoChave primária.
nameTextoNome da aplicação.

Âncora
tabelaRoleSecurable
tabelaRoleSecurable

Role Securable

Tabela de relacionamento entre Grupo e Permissionável

ÂncoratabelaRoletabelaRole

Role

Grupo ou Função.

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

Âncora
tabelaUserSecurable
tabelaUserSecurable

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  
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.application
TextoChave estrangeira da tabela
Application
User.

Âncora
tabelaLogin
tabelaUserRole
tabelaLogin
tabelaUserRole

Login

User Role

Tabela de relacionamento entre Usuário e GrupoA 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
role_
provider  provider_display_name  TextoLogin do usuário no provedor externo,provider_key  TextoSenha do usuário no provedor externo.
id  Texto
Provedor da autenticação externa.
Chave estrangeira da tabela Role.
user_id  TextoChave estrangeira da tabela User.

Âncora
tabelaSecurable
tabelaApplicationUser
tabelaSecurable
tabelaApplicationUser

Securable

Permissionável.

Application User

Tabela de relacionamento entre Aplicação e Usuários. Permite relacionar aplicações e usuários a partir de uma mesma base de dados, ver mais detalhes em Multi aplicações.

Coluna do Banco
Coluna do Banco
TipoFunção
id  TextoChave primária.
name
applicationTexto
Nome do permissionável
Chave estrangeira da tabela Application.
application
user  TextoChave estrangeira da tabela
Application
User.

Âncora

tabelaView

ferramentaPermissaoSeguranca

tabelaView

ferramentaPermissaoSeguranca

View

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

Coluna do BancoTipoFunçãoid  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.applicationTextoChave estrangeira da tabela Application.

Ferramenta

Para gerenciar inicialmente essa estrutura, o Cronapp possui a ferramenta de Permissão de Segurança (Figura 2), ela deve ser usada para cadastrar as permissões, grupos 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, podendo realizar ajustes de Grupos e usuários em tempo de execução. Os projetos modelos do Cronapp já possuem páginas para configuração de Grupos e usuários do sistema, acessíveis apenas por usuários que possuem o permissionável "Administrators".

Na prática, sempre que alteramos a ferramenta Permissões de segurança (Figura 2), 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.

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


Image Added

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

Aba Permissionáveis

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


Image Added

Figura 2.1 - 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.2) para abrir a janela de Edição, que agora possui 4 abas: Geral, Visões, Grupos e Usuários.


Image Added

Figura 2.2 - Janelas de configuração dos permissionáveis


  1. Editar permissionável: Abre a janela de edição.
  2. Aba Geral: edita o nome do permissionável (Figura 2.1).
  3. Aba Visões: permite cadastrar ou editar as views que esse permissionável terá acesso.
  4. Aba Grupos: adiciona grupos ao permissionável. Essa aba só permite selecionar os grupos adicionados a partir aba Grupos, criados em tempo de desenvolvimento.
  5. Aba Usuários: adiciona usuários ao permissionável. Essa aba só permite selecionar os usuários adicionados a partir aba Usuários, 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.
    Abra a janela de busca para selecionar um diretório ou arquivo. O "/**" ao final passa a mesma permissão para todo o conteúdo dentro do diretório (ex: /views/<diretório>/**).
  12. Métodos HTTP: define os métodos de requisição HTTP autorizados para esse diretório ou conjunto de arquivos.


Informações

A janela Buscar (destaque 11 da figura 2.2) exibirá o conteúdo dentro do diretório webapp (Endereço: src/main/webapp/) da aplicação web e www (Endereço: src/main/mobileapp/www/) da aplicação mobile. 

Os diretórios, arquivos e endereços exibidos na janela Buscar vão variar caso a opção Modo Avançado esteja habilitada ou não. Veja mais detalhes sobre esse recurso em Estrutura de arquivos.

Âncora
abaGrupos
abaGrupos

Aba Grupos

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


Image Added

Figura 2.3 - Edição do grupo Administrators


  1. Adicionar: abre a janela para inserir novo grupo.
  2. Atualizar: recarrega a lista de grupos.
  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 selecionar os usuários adicionados a partir aba principal Usuários, criados em tempo de desenvolvimento.

Âncora
abaUsuarios
abaUsuarios

Aba Usuários

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

 

Image Added

Figura 2.4 - 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.

Âncora
AtribuirPermissoes
AtribuirPermissoes

Atribuir permissões

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

Em desenvolvimento

A propriedade Segurança está disponível em diferentes ferramentas dentro do Cronapp. O exemplo da figura 3 exibe a janela da propriedade Segurança do Editor de views, nela é possível exibir e habilitar um componente visual para determinados permissionáveis (acesse o tópico "Segurança" em Propriedades dos componentes visuais pra detalhes sobre os campos "Visível para", "Habilitado para" e "Renderizado Para").


Image Added

Figura 3 - Restringindo o acesso de um componente visual


Já no exemplo da figura 3.1, a propriedade Segurança está disponível na janela de Propriedades do Bloco de programação, nesse caso, é possível habilitar a execução e os recursos de CRUD ao chamar um bloco de programação.


Image Added

Figura 3.1 - Limitando acesso a um bloco de programação servidor a partir do permissionável

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 Grupos (Figura 3.2). Através delas será possível definir permissionáveis aos grupos ou permissionáveis e grupos aos usuários. 


Image Added

Figura 3.2 - Menu Administrativo do sistema


Ao criar ou editar um usuário do sistema, é possível definir um ou mais Grupos ou selecionar diretamente um ou mais Permissionáveis (Figura 3.3). O campo Aplicações permite selecionar apenas as aplicações que o usuário terá acesso, caso a base de dados possua Multi aplicações


Image Added

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


Ao acessar a página Grupos, é possível criar e editar grupos, definir quais permissionáveis estão relacionados a esse grupo e os usuários que fazem parte (Figura 3.4).


Image Added

Figura 3.4 - Seleção de permissionáveis e usuários na edição do grupo

Bloquear usuário

Para impedir que um usuário tenha acesso ao sistema, é possível remover a aplicação (Application) associada ao usuário na tabela ApplicationUser (mais detalhes em Multi Aplicações) caso a permissão de acesso seja explicita, ou retirar os grupos (Roles) associadas ao usuário através da tabela (UserRoles).

O recomendado é que tenha apenas um grupo (Role) que dá permissão de acesso de um usuário a um sistema específico.


Dica
É importante destacar que toda permissão de acesso ao sistema é ignorada se o usuário for administrador geral, isto é, ele ter o permissionável (Securable) Administrator associado
ÂncoratabelaRoleSecurabletabelaRoleSecurable

Role Securable

Tabela de relacionamento entre Grupo e Permissionável.

Coluna do BancoTipoFunçãoid  TextoChave primária.role_id TextoChave estrangeira da tabela Role.securable_idTextoChave estrangeira da tabela Securable. ÂncoratabelaUserSecurabletabelaUserSecurable

User Securable

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

Coluna do BancoTipoFunçãoid  TextoChave primária.securable_id  TextoChave estrangeira da tabela Securable.user_id  TextoChave estrangeira da tabela User. ÂncoratabelaUserRoletabelaUserRole

User Role

Tabela de relacionamento entre Usuário e Grupo.

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

Nesta página

Índice
printablefalse