Hide a standard 'out of the box' button based on a users security roles
How To: Hide a standard 'out of the box' button based on a users security roles
Problem:
"I don't want some of my users having access to the Contact 'Process' Ribbon Group unless they have Organisation Level 'Delete' priviledges on the Contact Entity."
Solution:
The visibility of Ribbon Buttons is controled via it's associated
Command. You will recall from 'Getting started with the Ribbon
Workbench' that Commands are separate to Buttons so that more than
one button can use the same command.
Using the Ribbon Workbench for
CRM2011 it is easy to customise an 'out of the box' command and add
a Display Rule so that it will not be displayed unless the current
user has a specific priviledge on a particiular entitiy.
The key to this solution is that in order to hide a group, you must hide all of the buttons within that group - so this solution is applicable to both hiding a group or just an individual button.
1. Load the Contact entity into the Ribbon Workbench.
2. Select the Run Workflow button → Right Click → Customise Command
3. Locate the Mscrm.RunWorkflowSelected Command in the ‘Solution
Elements’ Panel
4. Right Click → Edit Display Rules
5. Click ‘+Add New’ and change the Id to be something like:
new.contact.CanDeleteContact.DisplayRule
TIP: Remember that the 'new' part of the default ID is controlled by the solution prefix. I recommend only changing the middle part for consistency.
6. Click ‘Add Step’ and select the Entity Privilege Rule.
7. Set the Step Properties as follows:
EntityName: contact
PrivilegeDepth: Global
PrivilegeType: Delete
TIP: You could change the leve to 'User' if you wanted to have finer control - or even change the entity to a 'dummy' entity so that you had explicit control over who had access to the buttons.
8. Repeat the process for the Start Dialog Button.
9. Select the ‘Start Dialog’ Button → Right Click → Customise Command
10. Locate the Mscrm.RunInteractiveWorkflowSelected Command → Right
Click → Edit Display Rules
11. Select the CanDeletecontact Display Rule and click ‘Add>’
12. Click Ok and then publish the solution
This will hide the Process Group on the Home Page Ribbon for
Contacts. You must also repeat the steps for the 'Form' and 'Sub
Grid' entity by selecting the ‘Form’ and ‘SubGrid’ ribbon types
using the Drop down on the top right of the Ribbon Design Panel.
The finished Ribbon Xml will look something like:
<?xml version="1.0" encoding="utf-16"?> <RibbonDiffXml xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <CustomActions /> <Templates> <RibbonTemplates Id="Mscrm.Templates" /> </Templates> <CommandDefinitions> <CommandDefinition Id="Mscrm.RunWorkflowSelected"> <EnableRules> <EnableRule Id="Mscrm.SelectionCountAtLeastOne" /> <EnableRule Id="Mscrm.RunWorkflowSelected" /> <EnableRule Id="Mscrm.VisualizationPaneNotMaximized" /> </EnableRules> <DisplayRules> <DisplayRule Id="new.contact.CanDeleteContact.DisplayRule" /> </DisplayRules> <Actions> <JavaScriptFunction FunctionName="Mscrm.GridRibbonActions.launchOnDemandWorkflow" Library="/_static/_common/scripts/RibbonActions.js"> <CrmParameter Value="SelectedControl" /> <CrmParameter Value="SelectedControlSelectedItemReferences" /> <CrmParameter Value="SelectedEntityTypeCode" /> <StringParameter Value="" /> </JavaScriptFunction> </Actions> </CommandDefinition> <CommandDefinition Id="Mscrm.RunInteractiveWorkflowSelected"> <EnableRules> <EnableRule Id="Mscrm.SelectionCountExactlyOne" /> <EnableRule Id="Mscrm.RunWorkflowSelected" /> <EnableRule Id="Mscrm.VisualizationPaneNotMaximized" /> </EnableRules> <DisplayRules> <DisplayRule Id="new.contact.CanDeleteContact.DisplayRule" /> </DisplayRules> <Actions> <JavaScriptFunction FunctionName="Mscrm.GridRibbonActions.runScript" Library="/_static/_common/scripts/RibbonActions.js"> <CrmParameter Value="SelectedControlSelectedItemReferences" /> <CrmParameter Value="SelectedEntityTypeCode" /> </JavaScriptFunction> </Actions> </CommandDefinition> </CommandDefinitions> <RuleDefinitions> <TabDisplayRules /> <DisplayRules> <DisplayRule Id="new.contact.CanDeleteContact.DisplayRule"> <EntityPrivilegeRule PrivilegeType="Delete" PrivilegeDepth="Global" EntityName="contact" /> </DisplayRule> </DisplayRules> <EnableRules> <EnableRule Id="Mscrm.SelectionCountAtLeastOne"> <SelectionCountRule AppliesTo="SelectedEntity" Minimum="1" /> </EnableRule> <EnableRule Id="Mscrm.RunWorkflowSelected"> <CustomRule FunctionName="Mscrm.GridRibbonActions.enableWorkflowOnGrid" Library="/_static/_common/scripts/RibbonActions.js"> <CrmParameter Value="SelectedControl" /> </CustomRule> </EnableRule> <EnableRule Id="Mscrm.VisualizationPaneNotMaximized"> <CustomRule FunctionName="Mscrm.RibbonActions.disableButtonsWhenChartMaximized" Library="/_static/_common/scripts/RibbonActions.js"> <CrmParameter Value="SelectedControl" /> </CustomRule> </EnableRule> <EnableRule Id="Mscrm.SelectionCountExactlyOne"> <SelectionCountRule AppliesTo="SelectedEntity" Minimum="1" Maximum="1" /> </EnableRule> </EnableRules> </RuleDefinitions> <LocLabels /> </RibbonDiffXml>