- Criado por Igor Andrade, última alteração em 03/06/2020
Você está vendo a versão antiga da página. Ver a versão atual.
Comparar com o atual Ver Histórico da Página
« Anterior Versão 9 Próxima »
O sistema de permissões de segurança é um mecanismo de autenticação e autorização de usuários. Usuários podem fazer login com as informações contidas no Banco de Dados ou podem usar um provedor de login externo. Os provedores de login externo suportados incluem o Active Directory, LDAP, 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 recomendado o seu uso.
Na prática, sempre que alteramos as Permissões de segurança, alimentamos o arquivo populate,json, responsável por alimentar o banco de dados no primeiro carregamento do sistema.
Para mais detalhes, acesse o tópico XXXX.
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 está dentro de um ou mais grupos e estar diretamente vinculado a um ou mais permissionáveis. A figura 2.1 representa essa hierarquia.
Figura 2.1 - Usuários podem estar associados a grupos ou diretamente a um permissionável
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 Permissiná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 do Cronapp já são criados com 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
- Adicionar: abre a janela para inserir novo item;
- 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
- Editar permissionável: Abre a janela de edição.
- Aba Geral: edita o nome do permissionável (Figura 2.2).
- Aba Visões: permite selecionar as views que esse permissionável terá acesso.
- 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.
- 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.
- Inserir visão: abre a janela para informar um endereço e selecionar os métodos HTTP.
- Recarregar visão: recarrega a lista;
- Coluna Padrão: lista todos os endereços já cadastrados;
- Editar: abre a janela para editar o endereço e alterar os métodos de requisição HTTP.
- Excluir: apaga o endereço selecionado.
- 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>/**
). - 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 as permissões 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 do Cronapp já são criados com 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
- Adicionar: abre a janela para inserir novo grupo.
- Atualizar: recarrega a lista.
- Editar grupo: Abre a janela de edição.
- Excluir: apaga o grupo selecionado.
- 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.
- 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 que criar os usuários que irão alimentar o sistema em sua primeira execução.
Por padrão, os projetos do Cronapp já são criados com 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
- Adicionar: abre a janela para inserir novo usuário.
- Atualizar: recarrega a lista de usuários.
- Editar grupo: Abre a janela de edição.
- Excluir: apaga o grupo selecionado.
- 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çao.
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 em um sistema gerado pelo Cronapp, é possível visualizar o menu ADMIN, que dá acesso as páginas Usuários e Funções (Grupos), através delas você poderá definir permissionáveis aos grupos (página Funções) ou permissiná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 - Ao editar um 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 à permissionáveis e definindo seus usuários (Figura 3.5).
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. Para muitos aplicativos, essa abordagem funciona bem. 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 todas as classes que são criadas junto com um projeto Cronapp. As classes AuditLog e Device não fazem parte do sistema de Permissão de Segurança do Cronapp.
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 3.1):
Nome da Entidade | Descrição |
---|---|
User | Representa um usuário. |
Role | Representa um grupo (função). |
Login | Representa logins e seus provedores para um usuário. |
Securable | Representa um permissionável, |
View | Representa um objeto do tipo View ao qual você quer aplicar controle de acesso definindo os métodos de requisição HTTP. |
RoleSecurable | Associa grupos e permissionáveis, permitindo que todos os usuários contidos em um grupo tenham permissão ao conjunto de acessos do permissionável. |
Associa usuários e permissionáveis, permitindo que o usuário tenha permissão diretamente ao conjunto de acessos do permissionável. | |
UserRole | Associa um usuário a um grupo (função). |
AuditLog | Representa informação de evento ocorrido no sistema, para maiores informações, acesse Log de Auditoria. |
Device | Representa um dispositivo que acessou o sistema mobile. |
Relacionamentos entre entidades
Os tipos de entidade são relacionados entre si das seguintes formas:
- Cada
User
pode ter múltiplosSecurables
associados, e cadaSecurable
pode estar associado a múltiplosUsers
. Esse relacionamento muitos-para-muitos é representado pela entidadeUserSecurable
. - Cada
User
pode ter múltiplosLogins
associados. - Cada
User
pode ter múltiplosRoles
associados, e cadaRole
pode estar associada a múltiplosUsers
. Esse relacionamento muitos-para-muitos é representado pela entidadeUserRole
. - Cada
Role
pode ter múltiplosSecurables
associados, e cadaSecurable
pode estar associado a múltiplosRoles
. Esse relacionamento muitos-para-muitos é representado pela entidadeRoleSecurable
. - Cada
Securable
pode ter múltiplosViews
associados.
Tabelas
Abaixo são detalhados todos os campos das tabelas usadas pelo Sistema de Segurança.
User
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
access_failed_count | Inteiro | Número de falha de acesso seguidos. |
Texto | E-mail do usuário. | |
email_confirmed | Lógico | Confirmação se o e-mail foi validado. |
lockout_enabled | Lógico | Usuário bloqueado para acesso ao sistema. |
lockout_end | Data e Hora | Horário que o usuário será desbloqueado para acessar o sistema. |
name | Texto | Nome do usuário. |
normalized_email | Texto | Cria uma cópia normalizada do email do usuário, garantindo que o usuário possa ter e-mail com caracteres especiais. |
normalized_user_name | Texto | Cria uma cópia normalizada do user_name, garantindo que o usuário possa ter um login com caracteres especiais. |
password | Texto | Senha do usuário. |
phone_number | Texto | Número de telefone. |
phone_number_confirmed | Lógico | Confirmação se o telefone foi validado. |
security_stamp | Texto | Usado 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ógico | Habilita a autenticação de dois fatores. |
user_name | Texto | Login do usuário. |
theme | Imagem no Banco | Tema escolhido pelo usuário. |
picture | Texto | Foto do usuário. |
Role
Grupo ou Função.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
builtin | Lógico | O registro só pode ser alterado em tempo de desenvolvimento. |
membership_enabled | Lógico | Novos membros podem ser inseridos no grupo (função). |
name | Texto | Nome do grupo (função). |
normalized_name | Texto | Cria 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 Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
login_provider | Texto | Provedor da autenticação externa. |
provider_display_name | Texto | Login do usuário no provedor externo, |
provider_key | Texto | Senha do usuário no provedor externo. |
user_id | Texto | Chave estrangeira da tabela User. |
Securable
Permissionável.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
name | Texto | Nome do permissionável. |
View
Aplica o controle de acesso aos métodos de requisição HTTP.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
securable_id | Texto | Chave estrangeira da tabela Securable. |
pattern | Texto | Página ou local com o controle de acesso. |
getMethodAllowed | Lógico | Permissão para o método get. |
headMethodAllowed | Lógico | Permissão para o método head. |
putMethodAllowed | Lógico | Permissão para o método put. |
postMethodAllowed | Lógico | Permissão para o método post. |
patchMethodAllowed | Lógico | Permissão para o método patch. |
deleteMethodAllowed | Lógico | Permissão para o método delete. |
optionsMethodAllowed | Lógico | Permissão para o método options. |
traceMethodAllowed | Lógico | Permissão para o método trace.. |
Role Securable
Tabela de relacionamento entre Grupo e Permissionável.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
role_id | Texto | Chave estrangeira da tabela Role. |
securable_id | Texto | Chave estrangeira da tabela Securable. |
User Securable
Tabela de relacionamento entre Usuário e Permissionável.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
securable_id | Texto | Chave estrangeira da tabela Securable. |
user_id | Texto | Chave estrangeira da tabela User. |
User Role
Tabela de relacionamento entre Usuário e Grupo.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
role_id | Texto | Chave estrangeira da tabela Role. |
user_id | Texto | Chave estrangeira da tabela User. |
Device
Tabela responsável por armazenar informações dos dispositivos móveis que acessaram o sistema mobile. A tabela Device não pertence ao sistema de Permissão de Segurança, porém, caso queira, é possível associar o dispositivo conectado ao usuário logado.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
token | Texto | Token do dispositivo. |
platform | Texto | Plataforma do dispositivo. |
model | Texto | Modelo do dispositivo. |
platformVersion | Texto | Versão da plataforma. |
appName | Texto | Nome da aplicação que acessou a base de dados. |
appVersion | Texto | Versão da aplicação que acessou a base de dados. |
Nesta página
- Sem rótulos