Утилитки
09
Авг
4

CRM это привелегия, а не право

Просматривая логи CRM, время от времени, Вы можете натолкнуться на ошибки CrmCheckPrivilege и AccessCheckEx (они же выдаются пользователям при включенных подробных ошибках). Обе они связаны с недостаточностью прав у пользователей. Рассмотрим как их устранить:

Ошибка #1 CrmCheckPrivilege

В логах она имеет такой вид:

Crm Exception: Message: SecLib::CrmCheckPrivilege failed. Returned hr = -2147220960 on UserId: 34e02135-0294-df11-bf56-00215a9b0011 and PrivilegeId: 84f64e3f-5164-4767-9a55-f58ce5b664ba, ErrorCode: -2147220960

К радости админа эта ошибка содержит очень подробное описание кому (UserId) и чего не хватает (PrivilegeId). Чтобы преобразовать ее в человеческий вид, воспользуйтесь таким SQL запросом:

declare @uid nvarchar(200), @pid nvarchar(200)
set @pid = '635CCDAD-F0A2-DF11-896F-000C29F6B309' -- GUID привилегии
set @uid = '1D75AED6-94CD-4E3B-B9AE-2A62F2C37190' -- GUID пользователя

-- Вытаскиваем ФИО пользователя
select firstname, middlename, lastname from systemuserbase where SystemUserId = @uid

-- Получаем роли пользователя
select
	Name
from
	RoleBase rb, SystemUserRoles sur
where
	1=1
	and rb.RoleId = sur.RoleId
	and sur.SystemUserId = @uid

-- Имя недостающей привилегии
select Name from dbo.PrivilegeBase where PrivilegeId = @pid

В этом запросе (в начале) Вам нужно будет только подставить GUID’ы юзвера и привелегии. После чего Вам будет выдано ФИО юзвера, назначенные на него роли и название недостающей привилеги (например, prvAppendToCampaign). Ну, а затем сами решайте выдвать ему нужную привелегию или нет 🙂


Ошибка #2 AccessCheckEx

Эта ошибка чуть посложнее… Она обычно представлена двумя сообщениями в логе CRM:

MessageProcessor fail to process message 'Retrieve' for 'opportunity'.

и

Crm Exception: Message: SecLib::AccessCheckEx failed. Returned hr = -2147187962, ObjectID: 635CCDAD-F0A2-DF11-896F-000C29F6B309, OwningUser: e3ca0b7f-fd8f-df11-bf56-00215a9b0011 and CallingUser: c3eff6ab-1990-df11-bf56-00215a9b0011, ErrorCode: -2147187962

Для ее «очеловечивания» можете воспользоваться утилитой Access Checker:

  • Скачайте и запустите Access Checker;
  • Подключитесь к Вашему CRM серверу (опция внизу-слева);
  • Выберите объект с которым у Вас проблемы (его имя написано в первом сообщении), из второго сообщения Вы узнаете GUID записи – его и вбивайте во второе поле. Ну, а в четвертое Вы должны поместите GUID пользователя выполняющего запрос (CallingUser);
  • Затем жмите Retrieve Rights, чтобы узнать какие привилегии имеет указанный юзвер в отношении заданной записи. Ну и уж сами решайте выдавать ему необходимые привилегии или нет 🙂


Комментарии (4)
  • Анатолий 09.08.2010

    Здрасте.
    А если наооборот нужно ограничить доступ к сущности (кастомной), а изначально она была создана как собственность организации — можно ли эту сущнось какими либо средствами пределать в собственность юзверя?
    Спасибо.
    Анатолий

  • slivka_83 09.08.2010

    Привет.

    Насколько мне известно — нет 🙂

  • cathy 09.08.2010

    Добрый день,
    Кажется у Вас ошибка в комментариях к первому скрипту.
    Судя по всему, @pid — это все-таки GUID привилегии, а @uid — GUID пользователя 😉

  • slivka_83 09.08.2010

    Добрый день 🙂

    Да, Вы правы 🙂 Спасибо что подсказали 🙂

*

code