通过基于特定安全角色的插件/ javascript禁用CRM表单控件

时间:2014-05-07 03:12:33

标签: javascript dynamics-crm-2011 dynamics-crm dynamics-crm-2013

我要求根据用户的角色禁用CRM表单上的某些控件。 我不熟悉CRM&我不完全确定如何通过javascript检查用户的角色。 要求是,如果用户具有某些角色,我需要禁用表单上的某些控件。

如果您可以放置​​代码段,那就太好了。谢谢。

确切方案:根据其他控件的某些特定条件,通过插件/ javascript禁用CRM帐户表单上的某些控件(即,当某些选项列表具有某些特定值时,我想要取消控制权,如果用户更改,我希望启用好。

1 个答案:

答案 0 :(得分:0)

在JavaScript中,您可以获得当前用户的安全角色,如下所示

var roles = Xrm.Page.context.getUserRoles();

以下代码应该适合您。

function OnLoad() {

    if (UserHasRole("Security Role Name")) {
        Xrm.Page.getControl("fieldname").setDisabled(true);
    } else {
        Xrm.Page.getControl("fieldname").setDisabled(false);
    }
}

function UserHasRole(roleName) {
    var serverUrl = Xrm.Page.context.getServerUrl();
    var oDataEndpointUrl = serverUrl + "/XRMServices/2011/OrganizationData.svc/";

    var org = Xrm.Page.context.getOrgUniqueName()
    var oDataEndpointUrl = "/" + org + "/XRMServices/2011/OrganizationData.svc/";

    oDataEndpointUrl += "RoleSet?$top=1&$filter=Name eq '" + roleName + "'";

    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 (GuidsAreEqual(userRole, id)) {
                    return true;
                }
            }
        }
    }

    return false;
}

function GetRequestObject() {
    if (window.XMLHttpRequest) {
        return new window.XMLHttpRequest;
    } 
    else {
        try 
        {
            return new ActiveXObject("MSXML2.XMLHTTP.3.0");
        } catch (ex) {
           return null;
        }
    }
}

function GuidsAreEqual(guid1, guid2) {
    var isEqual = false;

    if (guid1 == null || guid2 == null) {
        isEqual = false;
    } else {
        isEqual = guid1.replace(/[{}]/g, "").toLowerCase() == guid2.replace(/[{}]/g, "").toLowerCase();
    }

    return isEqual;
}

除此之外,请查看Dynamics CRM中的字段级安全功能。请查看以下链接:

How to configure Field Level Security in Microsoft Dynamics CRM 2011