...
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.
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:
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.
...
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. ) ).