Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Exemplo: O usuário "Teste" não pode visualizar o campo gusuario.status. Logo, qualquer requisição feita tentando passar o campo status (active) em um filtro (como em: http://{{dominio}}:{{port}}/api/framework/v1/users?active=true) a API retornará erro 403. 

Nas Api'sAPIs, a permissão em uma rotina ou funcionalidade, para uma determinada coligada, se materializa como um filtro, limitando as informações às coligadas que o usuário tem acesso.

...

• Mesmo que o usuário envie uma requisição contendo, no Body, um campo com restrição de edição, a API irá ignorar esse campo enviado.

Caso ele possua algum valor default declarado explicitamente no seu mapeamento, o insert será feito com o valor default. 

Caso não possua um valor default, ele será preenchido na base com o valor default do tipo de dado. Ex.: Int = 0; String = null.

• Caso o campo com restrição seja uma PK, a chamada retornará um erro.

| PUT e PATCH:

 • Usuários que tenham restrição de edição de campos, conseguirão utilizar o PUT/PATCH apenas se a requisição não tentar alterar o valor que o campo já possui na base.campo com restrição.


    • Usando a propriedade SkipCheckPropertyMapInfoForFieldLevelSecurity = False

Internamente a Lib fará uma comparação desses valores: O valor enviado no Body e o valor persistido na base

...

Para isto o mapeamento deve informar obrigatoriamente a PropertyMap, usando o método de overload map(), exemplo:

Map(e => e.Nome, dto => dto.Name); Em negrito esta definida a PropertyMap ou

Map(e => e.NomeFantasia, dto => dto.NomeFantasia);

Mesmo que o mapeamento não seja necessário.


    • Usando a propriedade SkipCheckPropertyMapInfoForFieldLevelSecurity = True

A comparação não será realizada e uma exceção será levantada para o campo com restrição.

Neste caso o mapeamento pode ser utilizado de forma mais simplificada, quando necessário, ou seja, não é obrigatório como no exemplo acima:

Map(e => e.NomeFantasia); Não é necessário informar PropertyMap


    • Existem duas formas de enviar o corpo da requisição:

• Incluindo o campo com restrição de edição no Body: Nesse caso, o valor do campo deve ser o mesmo valor salvo na base. Caso contrário, a API irá retornar um erro de acesso negado, com HTTP Code 403 (Forbidden), pois será considerado que o usuário está tentando alterar esse conteúdo.

• Não incluindo o campo com restrição de edição no Body (Apenas para PUT): Nesse caso, a API irá considerar o valor padrão do campo.
Caso ele possua algum valor default declarado explicitamente no seu mapeamento, o PUT considerará que o valor enviado no Body é o valor default do campo. 
Caso não possua um valor default mapeado, ele será preenchido na base com o valor default do tipo de dado. Ex.: Int = 0; String = null.
Em ambos os casos, o valor do campo deve ser o mesmo valor salvo na base. Caso contrário, a API irá retornar um erro de acesso negado, com HTTP Code 403 (Forbidden)pois será considerado que o usuário está tentando alterar esse conteúdo.

Obs: Para a propriedade SkipCheckPropertyMapInfoForFieldLevelSecurity = False


| DELETE:

 • A restrição de campos não influencia na remoção de registros. Caso o usuário possua um perfil com permissões para apagar o registro, este será removido independentemente de possíveis campos restritos ao usuário.



Nota
titleVersões anteriores à 12.1.2410

Este comportamento era diferente em versões anteriores à 12.1.2410:

• Usuários que possuem restrição de edição de campos não conseguirão remover o registro. Será emitido um aviso informando o campo com restrição.