Páginas filhas
  • Dados Protegidos no Browse

Versões comparadas

Chave

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

...

Geralmente essas listagens são montadas considerando o alias de considerando  uma tabela (, como SA1 no Cadastro de Clientes) , e os campos para serem exibidos são carregados a partir do dicionário de campos (SX3), avaliando regras para exibir a coluna/campo.


02. COMO FUNCIONARÁ O OFUSCAMENTO DE COLUNAS NO BROWSE?

Os componentes tentarão associar as identificação de colunas do browse (geralmente o código dos campos) com o campos cadastrados no Dados Protegidos, quando isto acontecer com sucesso as colunas serão então ofuscadas e não terão seu conteúdo exibido.

Internamente as colunas no browse são representadas pela classe FwBrwColumn e nela foi adicionada a propriedade lObfuscate para indicar que a coluna tenha seu conteúdo ofuscado.

Com isso o ofuscamento de dados no browse acontece utilizando esta propriedade. Para os componentes que utilizam dicionário esta marcação para o ofuscamento acontece utilizando o conteúdo das propriedades cId ou cReadVar, comparando com os nomes dos campos registrados nas tabelas de Dados Protegidos no momento que acontece a atribuição das colunas para o browse.

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 para upgrade para o Release 12.1.27;
  • pacote específico para Dados Protegidos, nos Releases 12.1.23 e 12.1.25.

03. O QUE VAI ACONTECER QUANDO UM INICIALIZADOR DE BROWSE RETORNAR UM VALOR DE CAMPO SENSÍVEL OU PESSOAL?

Por padrão o conteúdo será apresentado. Os blocos de preenchimento de conteúdo não serão restringidos e portanto, os campos virtuais sendo exibidos no browse precisam ser cadastrados nos dicionários para Dados Protegidos ou a função de busca do conteúdo precisará ela mesma restringir o resultado deixando o conteúdo anônimo com asteriscos (*).


04. QUAIS SÃO OS COMPONENTES UTILIZADOS PARA MONTAGEM DE BROWSES?

Os componentes para construção de browses são separados em funções ou classes , e também divididas entre : Baseada em Dicionário e Construídas Dinamicamente.

Os componentes disponíveis são: 

MBrowse e MarkBrow: São funções, que permitem a construção a partir de alias/dicionário ou tabelas temporárias (tabelas temporárias não são resultado direto de queries).

FwMBrowse e FwMarkBrowse: São classes, que permitem a construção a partir de alias/dicionário ou tabela temporária.

*- FwFormBrowse e FwBrowse: também são classes, contudo a construção de browses com essas classes é dinâmica, permitindo browses de array, resultado de query, tabelas temporárias ou alias/dicionário.

03. COMO FUNCIONARÁ O OFUSCAMENTO DE COLUNAS NO BROWSE?

As colunas no browse são representadas internamente pela classe FwBrwColumn, e nela foi adicionada a propriedade lObfuscate para indicar que a coluna tenha seu conteúdo ofuscado.

Com isso o ofuscamento de dados no browse acontece utilizando esta propriedade. Para os componentes que utilizam dicionário, esta marcação para realização do ofuscamento acontece utilizando o conteúdo das propriedades cId ou cReadVar, comparando com os nomes dos campos registrados nas tabelas de Dados Protegidos no momento que acontece a atribuição das colunas para o browse.


...

05. O QUE PRECISA SER FEITO COM MBROWSE E MARKBROW PARA OFUSCAR AS COLUNAS?

Para os browses criados utilizando alias e a configuração padrão, nada precisa ser realizado, pois na construção do browse será feita a avaliação das colunas a serem ofuscadas, conforme o cadastro para Dados Protegidos.

Para os browses construídos utilizando tabela temporária "TRB", será exigida alteração para informar os nomes das colunas que precisam ser ofuscadas. Esta alteração será adicionar um array com o formato lista de campos ({“CAMPO1”,“CAMPO2”}) na chamadas da função que monta o browse.

Exemplo:

Bloco de código
languagetext
linenumberstrue
aOfuscar := {"CAMPO1","CAMPO2"}

...


MBrowse(par1, par2…. aOfuscar)

...


MarkBrow(par1, par2…. aOfuscar)

...


06O QUE PRECISA SER FEITO COM FWMBROWSE E FWMARKBROWSE?

Estes browses possuem comportamento similar ao das funções mBrowseMBrowse/MarkBrow, sendo:

- A construção por alias, que confia na leitura das colunas a partir do dicionário. Nada precisa ser feito;

- A construção baseada em tabela temporária, precisa da informação da lista dos campos através de método e não parâmetro (o que diferencia das funções que recebe por parâmetro).

Exemplos:


Bloco de código
languagetext
linenumberstrue
oBrowse := FWMBrowse():New()

...


oBrowse:SetAlias(cAliasTmp)

...


oBrowse:SetTemporary(.T.)

...



// Define os campos

...


aAdd(aBrowse, {"Filial","FILIAL","C",006,0,"@!",,,,,,"FILIAL"}) 

...


aAdd(aBrowse, {"Numero","NUMERO","C", 006, 0, "@!",,,,,,"NUMERO"})

...


aAdd(aBrowse, {"Tipo","TIPO","C", 001, 0, "@!",,,,,,"TIPO"})

...


aAdd(aBrowse, {"Cliente","CLIENTE","C", 006, 0,"@!",,,,,,"CLIENTE"})

...


aAdd(aBrowse, {"Pedido Exp.","PEDEXP","C",020,0,"@!",,,,,,"PEDEXP"})

...



aEval := {"FILIAL", "NUMERO", "TIPO", "CLIENTE", "PEDEXP"}

...



// Define os campos que serão ofuscados

...


aOfuscar := FwProtectedDataUtil():UsrNoAccessFieldsInList(aEval)

...


oBrowse:SetObfuscFields(aOfuscar)

...


oBrowse:SetFields(aBrowse)

...


oBrowse:Activate()


No código de demonstração acima, a variável aBrowse é a lista de colunas para o browse, e a partir dela que são descobertas as colunas para serem ofuscadas. 

A alteração na construção padrão das colunas é para informar o ID da coluna, que permite posteriormente a associação do que deve ser ofuscado.

...


07O QUE PRECISA FAZER PARA FWFORMBROWSE E FWBROWSE?

Essas duas classes estão associadas com a construção personalizada das colunas e dados a serem exibidos, portanto são casos em que é exigido que aconteça a definição e informação das colunas que precisam ser ofuscadas no objeto.

...

Lista de campos para ofuscar

Bloco de código
languagetext
linenumberstrue
oBrowse := FWBrowse():New()

...


oBrowse:SetDataArray()

...


oBrowse:SetArray(aDataArray)

...


aEval := {"C5_NUM", "C5_CLIENTE", "C5_LOJA", "C5_DATA", "C5_PEDEXP", "C5_TIPO", "C5_CONDPG"}

...


aOfucar:= {} //FwProtectedDataUtil():UsrNoAccessFieldsInList(aEval)

...


aAdd( aOfucar, "C5_CLIENTE" )

...


aAdd( aOfucar, "C5_PEDEXP"  )

...


aAdd( aOfucar, "C5_TIPO"  )

...


oBrowse:SetObfuscFields(aObsFields)

...


oBrowse:SetColumns(aColumns)

...


oBrowse:Activate()


Coluna marcada para ofuscar

Bloco de código
languagetext
linenumberstrue
oBrowse := FWBrowse():New()

...


.

...


.

...


.

...


aOfuscar := FwProtectedDataUtil():UsrNoAccessFieldsInList(aEval)

...



For nContFlds := 1 To Len( aFields )

...


  nCol := Len(aColumns)

...



  lObfuscate := aScan(aOfuscar,{|x|x:cField == aFields[nContFlds]}) > 0

...



  AAdd( aColumns, FWBrwColumn():New() )

...


  aColumns[nCol]:SetData(&("{||(cTemp)->"+aFields[nContFlds]+"}"))

...


  aColumns[nCol]:SetData(&("{||(cTemp)->" + aFields[nContFlds]+"}"))

...


  aColumns[nCol]:SetTitle( aFields[nContFlds] )

...


  aColumns[nCol]:SetSize( 15 )

...


  aColumns[nCol]:SetID( aFields[nContFlds] )

...


  aColumns[nCol]:SetObfuscateCol( lObfuscate )

...


Next nContFlds

...



oBrowse:SetColumns(aColumns)

...


oBrowse:Activate

...

07. O QUE VAI ACONTECER QUANDO UM INICIALIZADOR DE BROWSE RETORNAR UM VALOR DE CAMPO SENSÍVEL OU PESSOAL?

...

(

...

)

...



Templatedocumentos


HTML
<style>
div.theme-default .ia-splitter #main {
    margin-left: 0px;
}
.ia-fixed-sidebar, .ia-splitter-left {
    display: none;
}
#main {
    padding-left: 10px;
    padding-right: 10px;
    overflow-x: hidden;
}

.aui-header-primary .aui-nav,  .aui-page-panel {
    margin-left: 0px !important;
}
.aui-header-primary .aui-nav {
    margin-left: 0px !important;
}

.aui-tabs.horizontal-tabs>.tabs-menu>.menu-item.active-tab a::after { 
	background: #FF9900; !important 
}

.menu-item.active-tab { 
	border-bottom: none !important; 
}

</style>