software‎ > ‎módulos‎ > ‎engine‎ > ‎perguntas frequentes‎ > ‎

Como fazer o 'merge' de permissões?

postado em 9 de nov de 2010 10:19 por Usuário desconhecido   [ atualizado em 8 de set de 2016 11:11 por Paulo Cesar Moreno ]
Alguns desenvolvedores devem está se perguntando: 'Merge' de permissões? o que é isso?
Bom, neste caso fica mais fácil de entender através de um exemplo prático.

Suponha que a chave do seu usuário é 123456 e que ele usuário está associado aos grupos "Grupo 01" e "Grupo 02", nesta ordem. Suponha também que as permissões de palavras chaves(campo ikeywords da tabela ipermission) estejam cadastradas de forma:
  • Para o "Grupo 01" as palavras chaves do processo ABC.ip são "P1;P2"
  • Para o "Grupo 02" as palavras chaves do processo ABC.ip são "P3;P4"
Ao chamar o método security.getPermission( 7889099 /* ABC.ip */, "ikeywords", 123456) ou connection.getPermission( 7889099 /* ABC.ip */, "ikeywords", 123456) será retornado apenas a permissão de palavras chaves referentes ao "Grupo 01", ou seja "P1;P2", pois ele é o primeiro grupo associado ao seu usuário.

Este comportamento é comum para toda permissão do tipo string, com é o caso da permissão de palavra chave(campo ikeywords). Outras permissões que têm o mesmo comportamento é a permissão de campos visiveis(campo ivisiblefieldnames) e a de campos alteráveis(campo ichangeablefieldnames). Entretando este mesmo comportamento é deferente para as permissões do booleanas com as permissões de visão, alteração, exclusão, etc... Nas permissões booleanas valerá sempre a mais permissiva.

Bem, mas se a sua necessidade é juntar todas as permissões de todos os grupos então você deverá fazer os merge de permissões. Para fazer o merge de permissões basta usar o terceiro parâmetro do método getPermission() que é o getMode. Veja como:
security.getPermission( 7889099 /* ABC.ip */, "ikeywords", 123456, "distinct" ) ou connection.getPermission( 7889099 /* ABC.ip */, "ikeywords", 123456, "distinct" )

O modo distinct junta todas as permissões de todos os grupos do usuário e as retorna, sem repetição.

Para conhecer as outras opção para usar no parâmetro getMode consulte a documentação JsDoc do getPermission() aqui.