Ir para o conteúdo

Alcançar

Reach é a implementação de segurança em nível de linha (RLS) do Vinyl. O Reach permite que os desenvolvedores de aplicativos restrinjam quais linhas estão disponíveis para cada usuário.

Muitos sistemas de gerenciamento de banco de dados relacional (RDBMS) oferecem suporte nativo para RLS. O alcance não é uma abstração para essas ofertas nativas. Em vez disso, o Reach é implementado pelo mecanismo de negócios Vinyl. Como resultado, o Reach é independente do banco de dados.

Casos de Uso

Os casos de uso comuns do 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 de dados.

Conceitos

Reach é composto pelos seguintes conceitos básicos:

  • Regra de alcance
  • Token de alcance
  • Alcance Registro

Regra de Alcance

Uma regra de alcance é um tipo de regra de negócios como uma regra padrão ou de validação. Tal como acontece com 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 eles podem acessar.

Token de Alcance

Cada regra de alcance seleciona uma e somente uma coluna designada como token de alcance. Esta coluna é identificada pelo tipo de uso da coluna "Reach Token".

O Reach Token identifica segmentos dos dados acessíveis ao usuário. Uma regra de alcance 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, e 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 de sua região.

Normalmente, um Reach Token não identificaria clientes individuais. Existem exceções, no entanto. Ao construir um sistema multitentante, o Reach Token pode identificar a linha de cliente do próprio 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 ligação - A coluna do objeto de dados vinculada pelo Reach Token.
  • Função - A função à 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 – Habilite ou desabilite a regra de alcance para fins de desenvolvimento e teste.
  • Índice - Ordem em que 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 visam uma tabela ou visualização física. As regras só podem ser registradas em objetos de dados direcionados à mesma tabela ou exibição.

Implementação

Todas as regras do Vinyl suportam um conjunto de eventos intrínsecos. O Filter O evento é responsável por recuperar linhas. O alcance é aplicado pelo Filter evento.

Como consequência, o Reach é compatível com os seguintes cenários:

  • Painéis - Inclui painéis de várias linhas e de uma linha, gráficos e calendários, etc.
  • Controles - Inclui controles de lista e rádio.
  • CRUD - Inclui apenas regras CRUD de negócios — não regras CRUD diretas ao 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 ao usuário do Vinyl.

Neste modelo:

  • Funcionários e clientes pertencem a uma região.
  • Cada funcionário está associado a um usuário do Vinyl.

A seguinte regra de alcance restringe os usuários de forma que eles só possam acessar clientes em sua própria região:

SELECT RegionId
FROM Employee
WHERE UserId = who('userid')

Supondo que a regra de alcance tenha como alvo o Customer tabela, ele pode ser registrado no 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 só deve ser aplicado para alguns usuários. Isso pode ser alcançado com 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 apenas clientes de sua própria região.

Ao cadastrar a Regra de Alcance, associe-a à papel_Vendas_. Isso garantirá que o Reach seja aplicado apenas aos usuários na papel_Vendas_: os usuários na papel Administrador terão acesso a todos os clientes.

Limitações

  • Atualmente, o Reach só é compatível com fontes de dados RDBMS.
  • O Reach atualmente não oferece suporte a operações entre plataformas: a regra e o objeto de dados do Reach devem pertencer à mesma fonte de dados de origem.
  • O Reach não é compatível com operações CRUD diretas ao banco de dados. O alcance é aplicado pelo mecanismo de negócios: as operações diretas ao banco de dados ignoram o mecanismo de negócios.
  • Uma regra de alcance só pode ter uma coluna de token de alcance. Conseqüentemente, os objetos de dados estão vinculados às regras de alcance por uma única coluna. Isso difere de outros tipos de regras que permitem aos desenvolvedores vincular objetos de dados a regras usando diversas colunas.
  • Atualmente, o Reach não é compatível com o Vinyl Connector.
  • Copiar um objeto de dados não copia registros de alcance. Isto é consistente com outros tipos de regras: Padrões, Validações e Ações também não são copiados.