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.
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.
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"!');
});
IMPORTANTE: Depois de ler sobre o evento onDefinePermissionsGrid você pode querer alterar a
visibilidade dos campos de permissão utilizando-o. Isto não é possível. A visibilidade dos campos
só pode ser alterada utilizando o método o método addClass do propriedade scope do próprio
campo.