Permissões 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, para que um usuário possa alterar a classe de um registro, o sistema exige por padrão 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 significativa (por exemplo, entre classes filhas de “Usuários”). Para esses casos, as classes podem ser configuradas para validar apenas a permissão de alteração nas duas classes envolvidas na mudança, em vez de exigir as permissões de deleção e inserção.
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 indicando as permissões ausentes, permitindo que o usuário entre em contato com o administrador do sistema para solicitar as permissões necessárias.
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 definidos no módulo
@nginstack/engine/lib/security/ClassChangePolicy.js
e são os seguintes:
- 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.
- 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 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.