Dynamics CRM 365 判断当前登录人是否包含某些角色(JS和C#)

JS代码:

// 匹配安全角色
function matchUserRole(entityRoleNameArray) {
    var isMatch = false;
    if (entityRoleNameArray.length > 0) {
        var strPermitRoleNames = entityRoleNameArray.split(",");
        var userRoleNameArray = new Array();
        // 设置筛选条件
        var filter = "";
        // 获取当前用户安全角色Guid组
        var userRolesGuid = Xrm.Page.context.getUserRoles();
        for (var index = 0; index < userRolesGuid.length; index++) {
            filter += "<value>" + userRolesGuid[index] + "</value>";
        }

        var fetchXMLEnableRules = "<fetch mapping='logical'>" +
            "<entity name='role'>" +
            "<attribute name='roleid'/>" +
            "<attribute name='name'/>" +
            "<order attribute='name' descending='false'/>" +
            "<filter type='and'>" +
            "<condition attribute='roleid' operator='in'>" + filter + "'</condition>" +
            "</filter>" +
            "</entity>" +
            "</fetch>";
        var clientURL = Xrm.Page.context.getClientUrl();
        var uri = clientURL + "/api/data/v8.2/roles?fetchXml=" + encodeURI(fetchXMLEnableRules);
        var req = new XMLHttpRequest()
        req.open("GET", encodeURI(uri), false);
        req.setRequestHeader("Accept", "application/json");
        req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
        req.setRequestHeader("OData-MaxVersion", "4.0");
        req.setRequestHeader("OData-Version", "4.0");
        req.onreadystatechange = function () {
            if (this.readyState == 4 /* complete */) {
                req.onreadystatechange = null;
                if (this.status == 200 || this.status == 204) {
                    var objData = JSON.parse(this.responseText);
                    for (var i = 0; i < objData.value.length; i++) {
                        var objDataItem = objData.value[i];
                        var roleName = objDataItem["name"];
                        if (strPermitRoleNames.indexOf(roleName) != -1) {
                            isMatch = true;
                            return true;
                        }
                    }
                }
                else {
                    var error = JSON.parse(this.response).error;
                    Xrm.Utility.alertDialog(error.message);
                }
            }
        };
        req.send();
    }
    return isMatch;
}

 

C#代码:

1.获取指定用户的安全角色

 /// <summary>
        /// 获取指定用户的安全角色
        /// </summary>
        /// <param name="adminService"></param>
        /// <param name="userid"></param>
        /// <returns></returns>
        private List<string> GetRoleList(IOrganizationService adminService, Guid userid)
        {
            List<string> roleNameList = new List<string>();
            QueryExpression query1 = new QueryExpression("role");
            query1.ColumnSet = new ColumnSet(true);
            LinkEntity lk = new LinkEntity("role", "systemuserroles", "roleid", "roleid", JoinOperator.Inner);
            lk.LinkCriteria.AddCondition(new ConditionExpression("systemuserid", ConditionOperator.Equal, userid));
            query1.LinkEntities.Add(lk);
            var role = adminService.RetrieveMultiple(query1);
            if (role != null && role.Entities != null && role.Entities.Count > 0)
            {
                foreach (var item in role.Entities)  //循环这个人的角色
                {
                    string rolename = item.GetAttributeValue<string>("name");
                    roleNameList.Add(rolename);
                }
            }
            return roleNameList;
        }

 

posted @ 2022-05-19 15:49  溜溜球_小钢wan  阅读(247)  评论(0编辑  收藏  举报