Histórico da Página
Avalia os acessos de um usuário e não permite
01. OBJETIVO
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.
02. DADOS GERAIS
A utilização da ofuscação dos dados em relatórios TReport é baseada nos acessos de usuário logado que está 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 célula 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 há informações que ligue essa operação a 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:
informações sensíveis ou pessoais os visualize ou tenha acesso pela impressão utilizando o componente TReport.
O relatório será impresso com os dados ofuscados utilizando asteriscos (*), quando o usuário que realizar a impressão não tiver os acessos para visualizar dados sensíveis ou pessoais habilitados.
A ofuscação acontece com todos os tipos de impressão como planilha, html, pdf etc.
A decisão de ofuscação dos campos é baseada nas seções e nas células que montam esta seção. É esperado que o nome que identifica internamente a célula esteja configurado na lista de campos dos Dados Protegidos, para que o campo tenha seu conteúdo ofuscado.
Para criar os recursos fundamentais no sistema é necessário a aplicação da lib, atualizada com label mínimo 20200214, e atualização do sistema com upddistr.
A aplicação do UPDDISTR pode acontecer com:
- pacote diferencial de upgrade para o Release 12.1.27;
- pacote específico para Dados Protegidos, nos Releases 12.1.17, 12.1.23 e 12.1.25.
Aviso O Release 12.1.17 somente para clientes com garantia estendida
Os totalizadores que são baseados em células com conteúdos ofuscados não terão os valores destas células considerados. Desta forma um totalizador que agrupe os dados de duas células uma ofuscada e outra não, terá como resultado somente o total das células que não estão ofuscadas.
Este comportamento tem por objetivo não permitir inferência de conteúdo ou valor a partir dos dados exibidos nos totalizadores de células.
Este comportamento só acontece quando é possível associar o nome de uma célula com um campo configurado nos Dados Protegidos.
Exemplo:
CELL(A1) - Valor( 10 ) - Será ofuscada
CELL(A2) - Valor( 10 ) - Não será ofuscada
Se uma fórmula for criada somando os dois valores CELL(A1) + CELL(A2) - o resultado será 10, já que o valor da célula ofuscada será desconsiderado.
Em uma situação sem a ofuscação de nenhuma destas duas células o resultado será 20, pois os valores das duas células serão considerados.
Os casos excepcionais onde não existe relacionamento direto entre a célula e os campos nos Dados Protegidos podem ser tratados com os comandos para ofuscar ou não ofuscar de forma forçada.
01- Utilizar o método SetObfuscate diretamente na célula que deverá ser ofuscada.
Exemplo :
oCell := TRCell():New(oProduto,"CELL01","SB1","Produto",,,,{|| cProduto })
If lDeveOfuscar
Foram disponibilizados dois métodos, o primeiro na classe de seção TRSection com oSection:SetObfuscCells(aCells) que determina quais as células daquela seção devem ter seu conteúdo ofuscado independente das configurações de usuário e dados protegidos presentes no sistema, já o segundo método está presente na classe de células TRCell com oCell:SetObfuscate(.T.)
Else
ou oCell:SetObfuscate(.F.)
EndIf
Dessa maneira a ofuscação é feita de forma individual e independente de verificação de acessos e afins.
A partir do momento que o valor que a célula 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 automáticos gerados pela
pelo mecanismo de ofuscação da seção ou por algum outro SetObfuscate para a mesma célula que ocorra posteriormente.
02- Utilizar o método SetObfuscCells diretamente na seção informando as células que deverão ser ofuscadas.
Exemplo :
oSection := TRSection():New( oReport,"Produtos",
{"SB1"}
,
{"Produtos"}
que indica se a célula deve ser ofuscada sempre ou exibida sempre.
A última consideração envolvendo os relatórios TReport é que o ofuscamento foi adicionado como interceptação em dois métodos: TRSection():Init() e TRSection():Print(), portanto caso seu relatório não passe por estes trechos (e ainda não foi encontrado nenhum relatório nesta situação), será exigido que utilize as instruções para forçar ofuscação como mencionado neste tópico.
Exemplos
...
- Quando não é exigida alteração
oCell := TRCell():New(oSection,"US_COD" ,"SUS", "Código Suspect",/Picture/,/nTamanho/,/lPixel/,{|| US_COD } )
>> A segunda posição é o nome e id da célula a ser impressa, portanto existindo configuração para o campo US_COD no cadastro de campos protegidos não será exigido qualquer outra alteração. - Quando é exigida alteração
oCell1 := TRCell():New(oSection,"CELL01","
...
- SUS","
...
- Suspect",,,,
...
- {||
...
- cSuspect })
oCell2 := TRCell():New(oSection,"CELL02","
...
- SUS","
...
- Loja",,,,{||
...
- cSuspLoja }
...
- )
oCell3 := TRCell():New(oSection,"CELL03","
...
- SUS","
...
- Nome",,,,
...
- {||
...
- cSuspNome }
...
)
- )
>> Dessa forma não é possível fazer a relação dos campos protegidos com a célula e portanto é exigido algum dos meios de forçar a ofuscação. - Ofuscação pela Seção
aAdd( aCells, "CELL01" )
aAdd( aCells, "CELL02" )
aAdd( aCells, "
...
CELL02" )
oSection:SetObfuscCells(aCells)
oSection:Init()
>> Utilizando o método SetObfuscCells diretamente na seção informando os nomes e identificação das células que deverão ser ofuscadas.
Dessa maneira a ofuscação é feita de forma coletiva amarrando as células
...
indicadas por seção
...
. Neste caso é necessário inicializar a seção (com o método init
...
()) ou a execução do método Print() para impressão.
As células enviadas pelo método SetObfuscCells serão somadas com as células avaliadas automaticamente pela seção.
...
Isso ocorre independente 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 células 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.
...
- Ofuscação pela Célula
oCell1:SetObfuscate( .T. )
oCell2:SetObfuscate( .T. )
>> Utilizando o método oCell:SetObfuscate( .
...
- T. )
...
Se uma célula que será ofuscada fizer parte de uma fórmula/acumulador seu conteúdo não será considerado na execução.
Exemplo:
CELL(A1) - Valor( 10 ) - Será ofuscada
CELL(A2) - Valor( 10 ) - Não será ofuscada
Se uma fórmula for criada somando os dois valores - CELL(A1) + CELL(A2) - o resultado será 10, já que o valor da célula ofuscada será desconsiderado.
...
- irá definir que a célula precisa ser ofuscada.
É possível também forçar que a célula não seja ofuscada informando o parâmetro como falso (.F.) e portanto esta célula terá seu conteúdo exibido independente dos acesso de usuário e configurações nos campos protegidos.