Разработка
22
Июл
3

Проверка Ролей безопасности пользователя в 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-запрос и возвращает список всех Ролей текущего пользователя;
  • Сравниваем возвращенные Роли с заданными в массиве и если хоть одна совпадает – возвращает тру.



Комментарии (3)
  • Александр 22.07.2012

    А ещё есть Xrm.Page.context.getUserRoles();

  • slivka_83 22.07.2012

    Есть 🙂 только она производит сравнение по GUID’ам Ролей. Иногда этого хватает — тут вопрос потребностей.

  • Александр 22.07.2012

    Скорее даже переносимости и читабельности 🙂

*

code