Versões comparadas
Chave
- Esta linha foi adicionada.
- Esta linha foi removida.
- A formatação mudou.
Um sistema com múltiplas aplicações é um sistema onde vários projetos utilizam o mesmo banco de dados e compartilham informações. Como, por exemplo, ao cadastrar um usuário na página do projeto A e definir que ele terá acesso aos projetos A e B, ele poderá realizar o acesso no projeto B a partir de um único cadastro.
Inserir fluxograma
Figura 1 - Esquema de duas aplicações que utilizam o mesmo banco
Estrutura de classes
Na figura abaixo são exibidas as classes usadas no Multi aplicações.
Figura 2 - Diagrama de classes
O modelo de dados das permissões de segurança consiste dos seguintes tipos de entidade (Figura 2):
Nome da Entidade | Descrição |
---|---|
Application | Representa uma aplicação. |
Role | Representa um grupo (função). |
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. |
Application User | Associa usuários e aplicações, permitindo que o usuário tenha permissão diretamente ao conjunto de acessos do permissionável. |
Relacionamentos entre entidades
Os tipos de entidade são relacionados entre si das seguintes formas:
- Cada
User
Application
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
.Role
associados.- Cada
Application
User
- pode ter múltiplos
Logins
Securable
associados.- Cada
User
Application
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
View
associados.- Cada
Role
Application
pode ter múltiplos
Securables
associadosUser
associados, e
Securable
pode - cada
User
pode estar associado a
Roles
- múltiplos
Application
. Esse relacionamento muitos-para-muitos é representado pela
RoleSecurable
.Cada Securable
pode ter múltiplos Views
associados- entidade
ApplicationUser
.
Tabelas
Abaixo são detalhados todos os campos das tabelas usadas pelo sistema Multi Applicações.
Application
Aplicação.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Identificador único da aplicação. |
name | Texto | Nome da aplicação. |
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. |
application | Texto | Chave estrangeira da tabela Application. |
Securable
Permissionável.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
name | Texto | Nome do permissionável. |
application | Texto | Chave estrangeira da tabela Application. |
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. |
application | Texto | Chave estrangeira da tabela Application. |
Application User
Tabela de relacionamento entre Aplicação e Usuários.
Coluna do Banco | Tipo | Função |
---|---|---|
id | Texto | Chave primária. |
application | Texto | Chave estrangeira da tabela Application. |
user | Texto | Chave estrangeira da tabela User. |
Configuração
Para utilizar a funcionalidade, é necessário atender alguns requisitos.
- Utilizar o mesmo banco de dados em todos os projetos (não pode ser o banco H2, pois ele não persiste os dados);
- O diagrama de dados dos projetos deve conter as mesmas classes para que a integração entre as funções seja possível.
Gerar CRUD
Após criar o projeto, abra o diagrama de dados app e selecione a classe Application. Clique no botão direito sobre a classe, selecione a opção Criar visão para entidade (destaque 1 da Figura 3.1), selecione o modelo de formulário CRUD (2) e depois selecione no campo Formulário de Referência a pasta admin (2). Por fim, clique em Avançar até finalizar.
Repita esse procedimento para todos os projetos.
Figura 3.1 - Criando CRUD do permissionável
Vincular usuários
Rode as aplicações. Abra uma delas e vá até a página de Usuários. Vamos adicionar um novo usuário e, no campo Aplicações, basta associar esses permissionáveis (que são as aplicações) e salvar. Por exemplo, o usuário abaixo terá acesso a aplicação Projeto 1 e Projeto 2 (Figura 3.2). Caso o usuário não esteja vinculado com a aplicação, ele nunca irá conseguir fazer o login nessa aplicação.
Figura 3.2 - Vinculando usuários
Testando
Abra a segunda aplicação e, na tela de Login, acesse com os dados do usuário cadastrado na primeira aplicação.
Figura 3.3 - Testando o sistema multi aplicações
Se o usuário continuar na página de login e a mensagem do bloco de exceção for informada na tela (Figura 3.3) significa que ele não possui o Permissionável da aplicação.
Índice |
---|