Проверка Ролей безопасности пользователя в JS
Чтобы в JS проверить есть ли определённые Роли безопасности у текущего пользователя, нужно написать вот такой код:
function onLoad() { var checkRoles = ["Управляющий сбытом", "Продавец"]; if (UserHasRole(checkRoles)) alert("У текущего пользователя есть одна из Ролей."); else alert("У текущего пользователя нет ни одной из Ролей."); } function UserHasRole(checkRoles) { var oDataEndpointUrl = Xrm.Page.context.getServerUrl() + "/XRMServices/2011/OrganizationData.svc/SystemUserSet?$select=systemuserroles_association/Name&$expand=systemuserroles_association&$filter=SystemUserId eq guid'" + Xrm.Page.context.getUserId() + "'"; var service = new XMLHttpRequest(); service.open("GET", oDataEndpointUrl, false); service.setRequestHeader("X-Requested-Width", "XMLHttpRequest"); service.setRequestHeader("Accept", "application/json, text/javascript, */*"); service.send(null); var requestResults = eval('(' + service.responseText + ')').d; var roles = requestResults.results[0].systemuserroles_association.results; for (var key in roles) { var role = roles[key].Name; for (var item in checkRoles) { if (role == checkRoles[item]) return true; } } return false; }
Стенограмма:
- На онлоаде мы определяем массив с названиями ролей, которые необходимо проверить;
- Отправляем массив в функцию проверяющую Роли;
- Функция выполняет oData-запрос и возвращает список всех Ролей текущего пользователя;
- Сравниваем возвращенные Роли с заданными в массиве и если хоть одна совпадает – возвращает тру.
А ещё есть Xrm.Page.context.getUserRoles();
Есть 🙂 только она производит сравнение по GUID’ам Ролей. Иногда этого хватает — тут вопрос потребностей.
Скорее даже переносимости и читабельности 🙂