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