Views:
Adding security to forms
KBA-01085-F7QTC4
Summary

Create a bit type field on the entity and add to the form

mcs_restricteditem

Add this to the form on load javascript and ensure it is enabled
crmForm.all.mcs_restricteditem.FireOnChange();

Add this code to the On Change for the mcs_restricteditem field on the form
//check if the current user has the 'System Administrator' role
if (crmForm.all.mcs_restricteditem.DataValue == true)
{
       if (UserHasRole('Restricted') != true)
      {
             crmForm.all.description. parentElement.parentElement.parentElement.style.display = 'none';
             crmForm.all.tab1Tab.style.display = 'none';
             crmForm.all.mcs_restricteditem.Disabled = true;
       }
}
else
{
             crmForm.all.description. parentElement.parentElement.parentElement.style.display = 'block';
             crmForm.all.tab1Tab.style.display = '';
}
function UserHasRole(roleName)
{
 
//get Current User Roles, oXml is an object
 
 var oXml = GetCurrentUserRoles();

 if(oXml != null)

 {

//select the node text

  var roles = oXml.selectNodes('//BusinessEntity/q1:name');

  if(roles != null)

   {

   for( i = 0; i < roles.length; i++)
   {
    if(roles[i].text == roleName)
    {
//return true if user has this role
     return true;
    }
   }
  }
 }
//otherwise return false
  return false;
}
function GetCurrentUserRoles()
{
 var xml = '' +
 '<?xml version=\'1.0\' encoding=\'utf-8\'?>' +
 '<soap:Envelope xmlns:soap=\'http://schemas.xmlsoap.org/soap/envelope/\' xmlns:xsi=\'http://www.w3.org/2001/XMLSchema-instance\' xmlns:xsd=\'http://www.w3.org/2001/XMLSchema\'>' +
 GenerateAuthenticationHeader() +
 ' <soap:Body>' +
 ' <RetrieveMultiple xmlns=\'http://schemas.microsoft.com/crm/2007/WebServices\'>' +
 ' <query xmlns:q1=\'http://schemas.microsoft.com/crm/2006/Query\' xsi:type=\'q1:QueryExpression\'>' +
 ' <q1:EntityName>role</q1:EntityName>' +
 ' <q1:ColumnSet xsi:type=\'q1:ColumnSet\'>' +
 ' <q1:Attributes>' +
 ' <q1:Attribute>name</q1:Attribute>' +
 ' </q1:Attributes>' +
 ' </q1:ColumnSet>' +
 ' <q1:Distinct>false</q1:Distinct>' +
 ' <q1:LinkEntities>' +
 ' <q1:LinkEntity>' +
 ' <q1:LinkFromAttributeName>roleid</q1:LinkFromAttributeName>' +
 ' <q1:LinkFromEntityName>role</q1:LinkFromEntityName>' +
 ' <q1:LinkToEntityName>systemuserroles</q1:LinkToEntityName>' +
 ' <q1:LinkToAttributeName>roleid</q1:LinkToAttributeName>' +
 ' <q1:JoinOperator>Inner</q1:JoinOperator>' +
 ' <q1:LinkEntities>' +
 ' <q1:LinkEntity>' +
 ' <q1:LinkFromAttributeName>systemuserid</q1:LinkFromAttributeName>' +
 ' <q1:LinkFromEntityName>systemuserroles</q1:LinkFromEntityName>' +
 ' <q1:LinkToEntityName>systemuser</q1:LinkToEntityName>' +
 ' <q1:LinkToAttributeName>systemuserid</q1:LinkToAttributeName>' +
 ' <q1:JoinOperator>Inner</q1:JoinOperator>' +
 ' <q1:LinkCriteria>' +
 ' <q1:FilterOperator>And</q1:FilterOperator>' +
 ' <q1:Conditions>' +
 ' <q1:Condition>' +
 ' <q1:AttributeName>systemuserid</q1:AttributeName>' +
 ' <q1:Operator>EqualUserId</q1:Operator>' +
 ' </q1:Condition>' +
 ' </q1:Conditions>' +
 ' </q1:LinkCriteria>' +
 ' </q1:LinkEntity>' +
 ' </q1:LinkEntities>' +
 ' </q1:LinkEntity>' +
 ' </q1:LinkEntities>' +
 ' </query>' +
 ' </RetrieveMultiple>' +
 ' </soap:Body>' +
 '</soap:Envelope>' +
 '';
 var xmlHttpRequest = new ActiveXObject('Msxml2.XMLHTTP');
 xmlHttpRequest.Open('POST', '/mscrmservices/2007/CrmService.asmx', false);
 xmlHttpRequest.setRequestHeader('SOAPAction',' http://schemas.microsoft.com/crm/2007/WebServices/RetrieveMultiple');
 xmlHttpRequest.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');
 xmlHttpRequest.setRequestHeader('Content-Length', xml.length);
 xmlHttpRequest.send(xml);
 var resultXml = xmlHttpRequest.responseXML;
 return(resultXml);
}


var label = crmForm.all.mcs_restricteditem_c;
label.innerHTML = '<font color='#FF0000'>' + label.innerText + '</font>';

Additional Comments