Alcançar
Alcance é App Builder implementação do Row-level Security (RLS). O Reach permite que os desenvolvedores de aplicativos restrinjam quais linhas estão disponíveis para cada usuário.
Muitos Relational Database Management Systems (RDBMS) oferecem suporte nativo para RLS. O Reach não é uma abstração para essas ofertas nativas. Em vez disso, o Reach é implementado pelo App Builder motor de negócios. Como resultado, o Reach é independente de banco de dados.
Casos de Uso
Casos de uso comuns para Reach incluem:
- Atribuição - Os vendedores só podem gerenciar leads atribuídos diretamente a eles.
- Unidades organizacionais - O Reach pode restringir o acesso dos funcionários aos dados por região geográfica ou divisão.
- Multilocação - Se um aplicativo oferece suporte a vários clientes, o Reach pode limitar o acesso do cliente ao seu segmento dos dados.
Conceitos
O Reach é composto pelos seguintes conceitos principais:
- Reach Rule
- Reach Token
- Reach Registration
Regra de Alcance
Uma Regra de Alcance é um tipo de regra de negócios como uma regra Padrão ou de Validação. Como todas as regras de negócios, as Regras de Alcance são fundamentalmente consultas mvSQL.
A Regra de Alcance determina quais segmentos dos dados um usuário pode acessar. Em muitos casos, uma Regra de Alcance utilizará o who()
ou session()
Funções mvSQL para correlacionar o usuário atual com os dados que ele pode acessar.
Token de Alcance
Cada Reach Rule seleciona uma e somente uma coluna designada como Reach Token. Esta coluna é identificada pelo tipo de uso da coluna "Reach Token".
O Reach Token identifica segmentos dos dados acessíveis ao usuário. Uma Reach Rule pode retornar várias linhas, cada linha identificando um segmento diferente. Se a regra não retornar nenhuma linha, o usuário não terá acesso a nenhum dado.
Por motivos de desempenho, o Reach Token geralmente identifica um segmento de linhas, não linhas individuais. Por exemplo, um Reach Token pode identificar uma região geográfica. Um gerente de vendas só poderá gerar relatórios para clientes dentro de sua região.
Normalmente, um Reach Token não identificaria clientes individuais. No entanto, há exceções. Ao construir um sistema multitenant, o Reach Token pode identificar a própria linha de cliente do usuário. Neste cenário, o cliente é o segmento.
Alcance o Registro
Os desenvolvedores devem registrar explicitamente uma Regra de Alcance em um objeto de dados. Um objeto de dados pode ter vários registros. Nesse caso, a interseção dessas Regras de Alcance determina quais linhas o usuário pode acessar.
Um Registro de Alcance inclui o seguinte:
- Regra de Alcance - A regra que restringe quais segmentos do objeto de dados são acessíveis ao usuário.
- Coluna de Vinculação - A coluna do objeto de dados vinculada pelo Token de Alcance.
- Função - A Função para a qual a Regra de Alcance se aplica. Se não estiver associada a uma Função, a regra se aplica a todos os usuários.
- Ativo - Habilita ou desabilita a Regra de Alcance para fins de desenvolvimento e teste.
- Índice - Ordem na qual as Regras de Alcance são aplicadas.
Nota
Observe que as Regras de Alcance não podem ser registradas em objetos de dados arbitrários. As Regras de Alcance têm como alvo uma tabela ou exibição física. As regras só podem ser registradas em objetos de dados que têm como alvo a mesma tabela ou exibição.
Implementação
Todos App Builder regras suportam um conjunto de eventos intrínsecos. As Filter
evento é responsável por recuperar linhas. O alcance é aplicado pelo Filter
evento.
Como consequência, o Reach é suportado nos seguintes cenários:
- Painéis - Inclui painéis de várias linhas e de uma única linha, gráficos e calendários, etc.
- Controles - Inclui controles de lista e rádio.
- CRUD - Inclui apenas regras de CRUD de negócios — não regras de CRUD diretas do banco de dados.
Exemplo
Dado o seguinte esquema de tabela:
Tabela | Chave primária | Relacionamentos |
---|---|---|
Region | RegionId | |
Customer | CustomerId | RegionId , chave estrangeira para Region mesa. |
Employee | EmployeeId | RegionId , chave estrangeira para Region mesa.UserId , referência a App Builder usuário. |
Neste modelo:
- Funcionários e clientes pertencem a uma região.
- Cada funcionário é associado a an App Builder usuário.
A seguinte Regra de Alcance restringe os usuários de forma que eles possam acessar somente clientes em sua própria região:
SELECT RegionId
FROM Employee
WHERE UserId = who('userid')
Assumindo que a Regra de Alcance tem como alvo o Customer
tabela, pode ser registrado na Customer (Source)
objeto de dados. Nesse ponto, o Reach será aplicado a todos os painéis vinculados ao Customer (Source)
objeto de dados.
Em muitos casos, o Reach deve ser aplicado somente para alguns usuários. Isso pode ser alcançado com a Segurança baseada em funções (RBS). Por exemplo, suponha que a fonte de dados defina as seguintes funções:
- Administrador - Pode acessar todos os clientes.
- Vendas - Pode acessar somente clientes em sua própria região.
Ao registrar a Reach Rule, associe-a à papel_Sales_. Isso garantirá que o Reach seja aplicado somente a usuários na papel_Sales_: usuários na papel Administrator terão acesso a todos os clientes.
Limitações
- O Reach é suportado atualmente apenas para fontes de dados RDBMS.
- O Reach não suporta atualmente operações multiplataforma: a regra do Reach e o objeto de dados devem pertencer à mesma fonte de dados de origem.
- O Reach não é suportado para operações CRUD diretas do banco de dados. O Reach é aplicado pelo mecanismo de negócios: operações diretas do banco de dados ignoram o mecanismo de negócios.
- Uma regra do Reach pode ter apenas uma coluna de token do Reach. Consequentemente, os objetos de dados são vinculados às regras do Reach por uma única coluna. Isso difere de outros tipos de regras que permitem que os desenvolvedores vinculem objetos de dados a regras usando várias colunas.
- O Reach não é suportado atualmente em conjunto com o App Builder conector.
- Copiar um objeto de dados não copia os Registros de Alcance. Isso é consistente com outros tipos de regras: Padrões, Validações e Ações também não são copiados.