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 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 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 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
- 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.
Âncora | ||||
---|---|---|---|---|
|
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
- 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.
Âncora | ||||
---|---|---|---|---|
|
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
- 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çã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.
Image Modified
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)
Âncora | ||||
---|---|---|---|---|
|
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 |
---|---|
User | Representa um usuário. |
Role | Representa um grupo (função). |
Login | Representa logins de provedores externos para um usuário. |
Securable | Representa 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. |
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). |
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.
Âncora | ||||
---|---|---|---|---|
|
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. |
Âncora | ||||
---|---|---|---|---|
|
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. |
Âncora | ||||
---|---|---|---|---|
|
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. |
Âncora | ||||
---|---|---|---|---|
|
Securable
Permissionável.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
name | Texto | Nome do permissionável. |
Âncora | ||||
---|---|---|---|---|
|
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. |
Âncora | ||||
---|---|---|---|---|
|
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. |
Âncora | ||||
---|---|---|---|---|
|
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. |
Âncora | ||||
---|---|---|---|---|
|
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. |
Nesta página
Índice | ||||
---|---|---|---|---|
|