Permissões de alteração de classe

O sistema possui formas distintas de validação da mudança de classe dos registros.

Fluxo operacional

Conceitos de alteração de classe

Embora internamente a mudança de classes seja apenas uma alteração de um registro no banco de dados, conceitualmente temos um registro sendo removido de uma classe e sendo inserido em outra.

Por exemplo, se alterarmos a classe de um registro de “Fornecedores” para “Clientes” (ambas filhas de “Pessoas”), aquele registro não irá mais aparecer no cadastro de fornecedores. Na visão do usuário final, aquele registro foi simplesmente apagado. Ao mesmo tempo, surge um novo registro em processos e relatórios que filtrem pela classe “Clientes”.

Por esse motivo, por padrão, para que um usuário possa alterar a classe de um registro, o sistema exige que ele possua permissão de exclusão na classe antiga e de inserção na classe nova. No entanto, existem casos nos quais a mudança de classe pode não ser tão “traumática” (por exemplo, entre classes filhas de “Usuários”). Caso o desenvolvimento deseje, pode configurar as classes para que ao invés de exigir as permissões de deleção e inserção, valide ao invés disso a permissão de alteração nas duas classes envolvidas na mudança.

Caso o usuário tente realizar a alteração da classe de um registro e não tenha as permissões necessárias, será disparada uma mensagem de erro amigável. A mensagem indica a permissão faltante, e que o usuário deve entrar em contato com o administrador do sistema sobre essa permissão.

Configurando a propriedade classChangePolicy das classes

Toda classe no sistema possui uma propriedade chamada classChangePolicy, herdada da classe Raiz. Os valores possíveis para essa propriedade estão na enumeração em ngin.security.ClassChangePolicy, e são os seguintes:

  • ngin.security.ClassChangePolicy.DELETE_AND_INSERT: esse é o valor padrão. Para que um usuário possa alterar a classe de um registro, ele deve possuir permissão de deleção na classe atual do registro, e permissão de inserção na nova classe.
  • ngin.security. ClassChangePolicy.CHANGE: caso seja utilizado esse valor, para que o usuário possa alterar a classe de um registro, ele deve ter permissão de alteração tanto na classe antiga do registro quanto na nova.

Atenção: para que o valor ngin.security.ClassChangePolicy.CHANGE seja levado em consideração, é necessário que ambas as classes envolvidas estejam configuradas com esse valor. Além disso, é necessário que todas as suas classes mães até o primeiro ancestral comum também estejam configuradas com esse valor. Caso contrário, será utilizada a validação padrão, verificando permissão de deleção na classe antiga e de inserção na nova.