Dynamic CRM 之判断用户是否具有某种角色

本文介绍了一个JavaScript函数,用于检查当前用户是否拥有特定的角色权限。通过调用组织数据服务API,获取用户所在业务单元的角色信息,并比对当前用户的已分配角色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

_UserHasRole: function (roleName) {
        var curUserId = Xrm.Page.context.getUserId();
        var curUnitId = Yasn.Account.CustomEvents._GetEntityAttribute("SystemUser", curUserId, "BusinessUnitId").BusinessUnitId.Id;


        var oDataEndpointUrl = location.protocol + "//" + location.host + "/" + Xrm.Page.context.getOrgUniqueName() + "/XRMServices/2011/OrganizationData.svc/RoleSet?$top=1&$filter=Name eq '" + encodeURIComponent(roleName) + "'" + " and BusinessUnitId/Id eq (guid'" + curUnitId + "')";
        var service = GetRequestObject();
        if (service != null) {
            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;

            if (requestResults != null && requestResults.results.length == 1) {
                var role = requestResults.results[0];
                var id = role.RoleId;
                var currentUserRoles = Xrm.Page.context.getUserRoles();
                for (var i = 0; i < currentUserRoles.length; i++) {
                    var userRole = currentUserRoles[i];
                    if (Yasn.Account.CustomEvents._GuidsAreEqual(userRole, id)) {
                        return true;
                    }
                }
            }


        }
        return false;
    },
    _GetRequestObject: function () {
        if (window.XMLHttpRequest) {
            return new window.XMLHttpRequest;
        }
        else {
            try {
                return new ActiveXObject("MSXML2.XMLHTTP.3.0");
            }
            catch (ex) {
                return null;
            }
        }
    },
    _GuidsAreEqual: function (guid1, guid2) {
        var isEqual = false;
        if (guid1 == null || guid2 == null) {
            isEqual = false;
        }
        else {
            isEqual = guid1.replace(/[{}]/g, "").toLowerCase() == guid2.replace(/[{}]/g, "").toLowerCase();
        }
        return isEqual;
    },


    _GetEntityAttribute: function (entityName, entityId, AttributeName) {
        var odataSelect = location.protocol + "//" + location.host + "/" + Xrm.Page.context.getOrgUniqueName() + "/XRMServices/2011/OrganizationData.svc/" + entityName + "Set?$select=" + AttributeName + "&$filter=" + entityName + "Id eq guid'" + entityId + "'";
        var retrieveReq = new XMLHttpRequest();
        if (retrieveReq != null) {
            retrieveReq.open("GET", odataSelect, false);
            retrieveReq.setRequestHeader("X-Requested-Width", "XMLHttpRequest");
            retrieveReq.setRequestHeader("Accept", "application/json, text/javascript, */*");
            retrieveReq.send(null);


            var retrieved = eval('(' + retrieveReq.responseText + ')').d;


            if (retrieved != null && retrieved.results.length == 1) {
                //var retrievedValue = retrieved.results[0].BusinessUnitId;
                //var id = retrievedValue.Id;
                //var name = retrievedValue.Name;
                //return retrievedValue;
                return retrieved.results[0];
            }
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值