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; }
记得收藏并关注,掌握更多相关知识!!!