Páginas filhas
  • Dados Protegidos em relatórios TReport

Versões comparadas

Chave

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



01.

...

Necessidade: Não permitir que um usuário sem acesso a um dado sensível ou pessoal faça a impressão do mesmo via tReport.

Como: PO do produto

Gostaria que: O tReport fizesse uso da api criada na issue DFRM1-19425 e não realizasse a impressão dos dados aos quais o usuário não tem acesso.

Definição de pronto: Evidência de testes, documentação, testes de unidade. Imprimir um relatório em tReport e um usuário sem acesso ao dado não faça a visualização do mesmo.

02. IMPLEMENTAÇÃO

Realizada a implementação dos métodos que serão responsáveis por anonimizar os dados de um relatório criado a partir da classe TReport com os seguintes pontos:

  • As células de uma seção contém as informações se ela deve se ofuscada ou não.
  • A seção possui as células que serão ofuscadasl.
  • A carga e execução das células que serão ofuscadas é realizada a partir do mpetodo Init() da seção e a partir do método Print() também da seção.
  • Foram disponibilizados métodos para que as células não ofuscadas automaticamente possam ser informadas diretamente.
  • Foi disponibilizada a possibilidade de não ofuscação de uma célula exista a necessidade desse procedimento.
  • Realizado testes para os casos encontrados a partir da implementação.

A liberação desta correção será realizada futuramente através do pacote de LIB versão 20200214, qual contemple os fontes abaixo relacionado(s):

report02.prw
report03.prw
FWBrwReport.PRW
FwProtectedDataUtil.prw

Este procedimento padrão é aplicável a liberação de correções e/ou melhorias de componentes nativos da LIB de Framework do sistema.

03. CASOS DE TESTES

  • Realizar testes acessando um ambiente que não possua nenhuma implementação de dados protegidos habilitada.
  • Realizar a criação de usuários que atendam as seguintes necessidades:
  • Usuário com todos os acessos.
  • Usuário sem nenhum acesso.
  • Usuário com acesso a campos sensíveis.
  • Usuário com acesso a campos pessoais.
  • Possuir na tabela XAM campos que possam ser utilizados na impressão de relatórios do sistema.
  • Realizar a execução de relatórios do sistema verificando os dados que serão impressos de acordo com os acessos do usuário logado.
  • Realizar a utilização de todos os tipos de relatórios disponíveis.
  • Realizar a impressão do browse verificando os dados que estão ofuscados.
  • Realizar a impressão de uma tela que se utilize do MVC (Ações Relacionadas)

...

DADOS GERAIS


A utilização da ofuscação dos dados em relatórios TReport é baseada nos acessos do usuário logado que esta amarrado aos valores cadastrados na tabela XAL/XAM. A partir dessas informações é definido se a célula será ofuscada ou não.

Essa informação é avaliada a partir do nome dado a celula construída, que se encontra no segundo parâmetro do método de construção desde que a seção seja inicializada para atualização de seus valores (método Init() de um objeto de seção) ou que o método print seja executado.

Exemplo :

TRCell():New(oProduto,"B1_COD" ,"SB1", "Produto",/Picture/,/nTamanho/,/lPixel/,

{|| cProduto } )

Caso a célula seja construída utilizando um nome que não possua relação com a tabela XAM (já mencionada) a ofuscação não será realizada automaticamente, pois não informações que ligue essa operação de ser realizada.
Para isso, caso exista a necessidade de ofuscar a célula mesmo sem amarração com os dados da XAM pode ser utilizado dois tratamentos para essa situação:

...

1º Utilizar o método SetObfuscate diretamente na célula que deverá ser ofuscada.
Exemplo :

oCell := TRCell():New(oProduto,"CELL01","SB1","Produto",,,,{|| cProduto }

)
If lDeveOfuscar
oCell:SetObfuscate( .T. )
Else
oCell:SetObfuscate( .F. )
EndIf

Dessa maneira a ofuscação é feita de forma individual e indenpendente de verificação de acessos e afins.

A partir do momento que o valor que a celula e ofuscados diretamente (seja ele para falso ou verdadeiro) seu valor não será modificado até o final de sua impressão, seja ele pelos valores automaticos gerados pela
pelo mecanismo de ofuscação da seção ou por algum outro SetObfuscate para a mesma célula que ocorra posteriormente.


2° Utilizar o método SetObfuscCells diretamente na seção informando as celulas que deverão ser ofuscadas.
Exemplo :

oSection := TRSection():New( oReport,"Produtos",

{"SB1"}

,

{"Produtos"}

,, )

oCell1 := TRCell():New( oSection,"CELL01","SB1", "Produto",,,,

{|| cProduto } )
oCell2 := TRCell():New( oSection,"CELL02","SB1", "Produto",,,,{|| cProduto }

)
oCell3 := TRCell():New( oSection,"CELL03","SB1", "Produto",,,,

{|| cProduto }

)

aAdd( aCells, "CELL01" )
aAdd( aCells, "CELL02" )
aAdd( aCells, "CELL03" )

oSection:SetObfuscCells( aCells )
oSection:Init()

Dessa maneira a ofuscação é feita de forma coletiva amarrando as celulas indicadas para ofsucação por seção, é necessário inicializar a seção (método init) para que esses valores sejam
utilizados para atualizar os estados das células da seção.

As celulas enviadas serão somadas com as células avaliadas automaticamente pela seção.

Isso também é indenpendente de verificação de acessos e afins.

Observações :
As maneiras citadas para utilização (SetObfuscate na célula e SetObfuscCells na seção) só serão necessárias caso as celulas criadas, e amarradas a uma seção, não sejam nomeadas com valores que se encontre na XAM.

Caso as células sejam nomeadas com valores que se encontre na XAM a verificação de acesso e ofuscação dos dados é realizado automaticamente.

A não ofuscação de uma célula é permitida somente de maneira individual ( oCell:SetObfuscate( .F. ) ).