Como adicionar colunas ao processo de permissões

Introdução

Durante o processo de desenvolvimento, quando trabalhando em novas funcionalidades para o sistema às vezes surge a necessidade de criar uma permissão específica para uma ação definida nesta funcionalidade.

O processo de definição de permissões pertence à licença do time Framework, então para resolver o nosso problema isoladamente, existe uma maneira isolada e simples de criar essa coluna sem alterar esse processo.

Criação da coluna na tabela de permissões

O primeiro passo a se dar é criar a nova coluna para a nossa nova permissão na tabela de permissões, por isso vamos à classe Permissões em Raiz -> Dados -> Sistema -> Permissões. Com essa classe em foco vamos criar um novo registro contendo os dados do nosso campo.

var fld = this.field("EDITANOMECLIENTE", "boolean");

fld.label = "Permite edição de nomes de clientes em um processo imaginário";

fld.help = "Informe se o usuário ou grupo tem permissão para alterar os nomes dos clientes imaginários no processo imaginário.";

fld.order = 999;

fld.visible = true;

fld.scope.addClass(-123456678);

Você deve ter notado que chamamos o método addClass do propriedade scope que, como o nome já diz, adiciona as classes passadas por parâmetro dentro do escopo deste campo de permissão. A consequência disso é que este campo estará visível no processo de permissões para estas classes e suas descendentes. Essa é a única maneira de alterar a visibilidade dos campos de permissão. Apesar de não recomendarmos, é possível um campo de permissão ter várias classes raízes, basta chamar o método novamente passando uma nova chave. Nos casos em que é necessário a criação de uma nova raiz para o campo de permissão é preferível que se crie um novo campo.

IMPORTANTE: Quando dizemos que a visibilidade dos campos de permissão não deve ser alterada em nenhum lugar, nem mesmo no evento onDefinePermissionsGrid, estamos falando sério. Caso isso aconteça um erro será disparado. :)

Feito isso, certifique-se de que a coluna está criada no banco de dados e no cache local, e prossiga com o nosso manual.

Definição do onDefinePermissionsGrid

Agora que temos o campo criado e visível, pode ser necessário ainda alguma customização. Como temos acesso aos campos? Simples! É só definir uma implementação do evento onDefinePermissionsGrid na classe que se deseja essas alterações. Segue um exemplo:

this.onDefinePermissionsGrid.set(function (grid) {

inherited(grid);

var fld = grid.field('editanomecliente');

fld.label('lambda');

fld.help('Permissão para escrever "lambda"!');

});

Pronto! Você customizou seu campo!

Com isso finalizamos mais esse manual. Bom Trabalho!

Mas podemos reforçar mais uma vez um ponto importante:

IMPORTANTE: Depois de ler sobre o evento onDefinePermissionsGrid você pode estar tendo idéias sobre alterar a visibilidade dos campos de permissão utilizando-o. Desista. A visibilidade dos campos só pode ser alterada, como dizemos acima, utilizando o método o método addClass do propriedade scope do próprio campo, qualquer tentativa de fugir disso será em vão e você ganhará um erro na sua tela como recompensa. :)