Como identificar o privilégio em falta

O Microsoft Dynamics CRM já traz por defeito Roles de Segurança, mas é quase sempre necessário adaptá-los às necessidades de cada organização. Um problema muito comum é depararmo-nos com falta de permissões quando tentamos executar uma determinada acção, com um Role de Segurança específico. O erro mostrado é o seguinte:

Erro de permissões

“The logged-on user does not have the appropriate security permissions to view these records or perform the specific action.”

Privilégios escondidos

Uma das razões que origina este problema é a falta de “privilégios escondidos”. São privilégios que não estão visíveis no formulário dos Roles de Segurança, e que não são incluídos nos Roles que criamos de raiz. Recomendamos uma de duas soluções:

· Copiar um Role existente e editá-lo em vez de criar um Role de raiz. Desta forma garantimos que os privilégios escondidos estão presentes.

· No caso de se tratar de um Role criado de raiz, instalar o último Update Rollup e aplicar a solução detalhada no artigo 968515

Falta de privilégios

Se a origem do problema não é a falta de privilégios escondidos, pode-se tratar pura e simplesmente de algum privilégio que faltou incluir no Role. Em vez de seguir o caminho de ‘tentativa/erro’, podemos facilmente identificar exactamente a permissão em causa.

1. Activar as platform traces

2. Reproduzir o erro

3. Desactivar as traces

4. Abrir as traces, e procurar por ‘level: Error’, até encontrar um erro semelhante ao seguinte:
>Crm Exception: Message: SecLib::CrmCheckPrivilege failed. Returned hr = -2147220960 on UserId: 416cb65c-292c-de11-88a9-0003ffede221 and PrivilegeId: 8b99344e-ebbf-4f84-8438-e1e34d194de9, ErrorCode: -2147220960

5. Já temos o ID do privilégio que falta: ‘8b99344e-ebbf-4f84-8438-e1e34d194de9’

6. De seguida, abrir o SQL Server Management Studio, e executar a instrução seguinte na base de dados <Organização> _MSCRM:
select * from privilegebase where privilegeId = '8b99344e-ebbf-4f84-8438-e1e34d194de9'

7. No resultado temos finalmente o nome do privilégio em falta na coluna ‘Name’: prvAssignActivity

Basta então adicionar este privilégio ao nosso Role de Segurança para resolver o problema:

Privilégio em falta

 Yoann Nesme