Sunday, August 2, 2020

Check User Roles - Power Automate

We'd have come across requirements to check the roles of a User in Power automate, but not have found any message to get a User Roles directly from the flow. So the way to do it is to retrieve the System User: Role N:N intermediate entity records and check the count.

There's a different challenge going this way! the intermediate entity name to be used for list Records action in the flow is not same as the name that we see in the CRM solution, we need to get that from the API service. You can get the same by searching for the relation in the page: https://[OrganisationName].api.crm [Version] .dynamics.com/api/data/v9.0/         (Source : https://ajitpatra.com/2019/08/26/microsoft-flow-retrieve-nn-records-in-d365/)
For a System user roles the entity name is systemuserrolescollection

Below is the list records action fetch xml to retrieve No. of roles out of roleName1/roleName2/roleName3 that a User with guid "XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" this guid can be passed directly or  can also be replaced with a variable as in the snapshot.
fetchxml for list records:

<fetch>
  <entity name="systemuserroles" >
    <attribute name="systemuserroleid" />
    <filter>
      <condition attribute="systemuserid" operator="eq" value="XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX" />
    </filter>
    <link-entity name="role" from="roleid" to="roleid" link-type="inner" alias="Roles" >
      <filter type="or" >
        <condition attribute="name" operator="eq" value="roleName1" />
        <condition attribute="name" operator="eq" value="roleName2" />
        <condition attribute="name" operator="eq" value="roleName3 />
      </filter>
    </link-entity>
  </entity>
</fetch> 

The Length of the list - in this case  length(outputs('Retrieve_Creating_User_Roles_intent_roles_count')?['body']?['value']) returns non zero if User has at least one role out of above 3  mentioned. Replace Retrieve_Creating_User_Roles_intent_roles_count with the name of list records step.
And you are ready!