|
29.10.2015, 12:49 | #1 |
Даёшь прямые руки!
|
Xrm.Page.context.getUserRoles()
Всем доброго времени суток!
Написал небольшой код для определения наличия у пользователя нужной роли. Прогнал эту функцию на нескольких тестовых пользователях и после положительного результата впихнул на боевой сервер. И всё работало замечательно до тех пор пока не нашлось несколько пользователей, у которых эта функция не срабатывала. Добавил несколько алертов для того что бы понять что же там не так и обнаружил что у этих "избранных" пользователей в строке помеченной *** возвращается совершенно другое значения ID нежели на самом деле имеет эта группа. Назначал разные роли для этих пользователей и скрипт тоже возвращал какие-то другие значения. Похоже, что я упустил какой - то нюанс в этом коде, но хоть убей не пойму в чём он заключается... Код: function checkUserGroups(group/*группа в виде ID без фигурных скобок*/)//Проверка пользователя на участие в группе { if (!group) { //alert ("Пусто!!!"); return false; } var userroles; var result = false; userroles = Xrm.Page.context.getUserRoles(); //alert (typeof userroles); group = group.toLowerCase(); //alert (userroles); //alert (UserRoles[1]); for (var i=0; i<=userroles.length; i++) { //alert ("Сейчас сравним правильную группу: \"" + group + "\" сравним со значением из массива: \"" + userroles[i]+"\""); if (userroles[i]) { //alert( "Обнаружена роль: " + userroles[i].toUpperCase()); //*** if (userroles[i] == group) { //alert("Правильная роль обнаружена!" + userroles[i].toUpperCase()); result = true; return result; } } } //alert ("Результат проверки группы '"+group+"' != "+ result); return result; } |
|
29.10.2015, 13:04 | #2 |
Консультант-джедай
|
Пользователи из разных подразделений?
__________________
Крокодил, крокожу и буду крокодить. Человек человеку - волк , а зомби зомби - зомби. Экстремал и буду экстремать! Блога |
|
|
За это сообщение автора поблагодарили: andyandy (1). |
29.10.2015, 13:10 | #3 |
Даёшь прямые руки!
|
Так точно, в разных!
Не думал, что проблема может быть в этом . Получается нужно добавлять сразу несколько ID для каждого подразделения... Попробую спасибо за быстрый ответ. |
|
29.10.2015, 13:22 | #4 |
Участник
|
Если подразделения наследуют роль из родительского, то роли с одинаковыми названиями создаются во всех дочерних подразделениях. Чтобы на хардкодить гуиды, мы в тех. условиях с заказчиком оговорили названия ролей, которые не должны изменяться, и уже в коде используем эти названия. Решение тоже не 100% элегантное, но перенос кода осуществляется легче.
|
|
29.10.2015, 13:43 | #5 |
Даёшь прямые руки!
|
Всё заработало спасибо! С названиями интересный вариант, но мало ли кто нибудь его изменит в моё отсутствие и забудет об этом упомянуть . Хотя я так понимаю 100% гибкого решения не придумаешь...
|
|
02.11.2015, 14:45 | #6 |
Moderator
|
Я в своем решении хардкодил только идентификаторы головных ролей (считайте ролей в головном подразделении). Далее скриптом запрашивал ParentRootRoleId от ролей пользователя и сравнивал с хардкодом.
Еще есть вариант стразу запросить рутовые роли текущего пользователя через OData: /SystemUserRolesSet?$select=systemuserroles_association/ParentRootRoleId&$expand=systemuserroles_association&$filter=SystemUserId eq guid'sample', но у меня так не вышло. Через SOAP не пробовал, но там точно должно работать.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional Последний раз редактировалось Артем Enot Грунин; 02.11.2015 в 14:55. |
|
10.11.2015, 15:36 | #7 |
Участник
|
Мы решаем проблему следующим образом.
у нас есть специальная сущность "Настройка", где есть уникальный строковый идентификатор, по которому эту настройку можно найти и поле значение в поле значение мы через разделитель задаем названия ролей в коде, получаем значение, разбиваем на массив ролей и выполняем проверку. если название роли будет изменено, то достаточно изменить его в настройке и не менять код особенно полезно, когда неожиданно функционал должен быстро начать работать и для другой роли |
|
Теги |
groupid, crm2011 |
|
|