I have one situation, login user has multiple security roles, if the login user has permission for particular role, show some buttons/fields otherwise the hide buttons/fields.
It is not stright forward to find out the security role, So i wrote one javascript to find out the security role.
Here i am checking the user has "Content Manager" security role or not.
This function will get all the user's security role Id, passing security role id to get the security role name. If it match, it is true otherwise false.
This function calling odata web service and get the each security role name.
It is not stright forward to find out the security role, So i wrote one javascript to find out the security role.
<script src="../ClientGlobalContext.js.aspx" type="text/javascript"></script>
<script src="/WebResources/gab_JavaScript/Jquery1.10.2.min.js" type="text/javascript" language="javascript"></script>
<script src="/WebResources/gab_JavaScript/Jason.js" type="text/javascript" language="javascript"></script>
<script src="/WebResources/gab_JavaScript/Jquery1.10.2.min.js" type="text/javascript" language="javascript"></script>
<script src="/WebResources/gab_JavaScript/Jason.js" type="text/javascript" language="javascript"></script>
function context() {
if (typeof GetGlobalContext != "undefined") {
return GetGlobalContext();
}
else {
if (typeof Xrm != "undefined") {
return Xrm.Page.context;
}
}
}
if (typeof GetGlobalContext != "undefined") {
return GetGlobalContext();
}
else {
if (typeof Xrm != "undefined") {
return Xrm.Page.context;
}
}
}
function GetServerUrl() {
var Crmurl = window.location;
var orgName = context().getOrgUniqueName();
return Crmurl.protocol + "//" + Crmurl.host + "//" + orgName + "/xrmservices/2011/OrganizationData.svc/";
}
var Crmurl = window.location;
var orgName = context().getOrgUniqueName();
return Crmurl.protocol + "//" + Crmurl.host + "//" + orgName + "/xrmservices/2011/OrganizationData.svc/";
}
Here i am checking the user has "Content Manager" security role or not.
function BookAuditMatch() {
var ECMRole = CheckUserRole("Book Content Manager");
if (ECMRole) {
//Do something
}
}
var ECMRole = CheckUserRole("Book Content Manager");
if (ECMRole) {
//Do something
}
}
This function will get all the user's security role Id, passing security role id to get the security role name. If it match, it is true otherwise false.
function CheckUserRole(roleName) {
var currentUserRoles = Xrm.Page.context.getUserRoles();
for (var i = 0; i < currentUserRoles.length; i++) {
var userRoleId = currentUserRoles[i];
var userRoleName = GetRoleName(userRoleId);
if (userRoleName == roleName) {
return true;
}
}
return false;
}
var currentUserRoles = Xrm.Page.context.getUserRoles();
for (var i = 0; i < currentUserRoles.length; i++) {
var userRoleId = currentUserRoles[i];
var userRoleName = GetRoleName(userRoleId);
if (userRoleName == roleName) {
return true;
}
}
return false;
}
This function calling odata web service and get the each security role name.
function GetRoleName(userRoleId) {
var selectQuery = "RoleSet?$top=1&$filter=RoleId eq guid'" + userRoleId + "'&$select=Name";
var VoterAddress = "";
var odataSelect = GetServerUrl() + selectQuery;
//alert(odataSelect);
var roleName = null;
$.ajax({
type: "GET",
async: false,
contentType: "application/json; charset=utf-8",
datatype: "json",
url: odataSelect,
beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); },
success: function (data, textStatus, XmlHttpRequest) {
var result = data.d;
if (!!result) {
roleName = result.results[0].Name;
}
},
error: function (XmlHttpRequest, textStatus, errorThrown) {
//alert('OData Select Failed: ' + odataSelect);
}
});
return roleName;
}
var selectQuery = "RoleSet?$top=1&$filter=RoleId eq guid'" + userRoleId + "'&$select=Name";
var VoterAddress = "";
var odataSelect = GetServerUrl() + selectQuery;
//alert(odataSelect);
var roleName = null;
$.ajax({
type: "GET",
async: false,
contentType: "application/json; charset=utf-8",
datatype: "json",
url: odataSelect,
beforeSend: function (XMLHttpRequest) { XMLHttpRequest.setRequestHeader("Accept", "application/json"); },
success: function (data, textStatus, XmlHttpRequest) {
var result = data.d;
if (!!result) {
roleName = result.results[0].Name;
}
},
error: function (XmlHttpRequest, textStatus, errorThrown) {
//alert('OData Select Failed: ' + odataSelect);
}
});
return roleName;
}
1 comment:
For better performance, try this pattern instead of a service call to the API...
https://community.dynamics.com/crm/b/crminthefield/posts/get-user-security-role-name-from-context-in-dynamics-365-ce-crm
Post a Comment