---
sourceDocument: Xanadu Customer Service Management
sourceDocumentLink: https://servicenow-prod.fluidtopics.net/r/xanadu/customer-service-management

 Release :

    - xanadu

ft:locale :

    - en-US

ft:publication_title :

    - Xanadu Customer Service Management

ft:clusterId :

    - csm

bundleId :

    - csm

workflow :

    - Customer and Industry


---

# Creating custom user roles

# Creating custom user roles {#ariaid-title1}

* Release version: Xanadu
* 
* Updated August 1, 2024
* 
* ![](https://www.servicenow.com/docs/portal-asset/ico-clock) 1 minute to read

System administrators can create custom roles or modify the access of existing roles by
using script includes and extension points/instances.  
The Customer Service Management application utilizes platform ACLs and query business rules to restrict data access based on user roles. If needed, users with the system administrator role can create custom roles or modify the access of existing roles by using script includes and extension points/instances.

* Script includes store JavaScript functions and classes to handle the role access control logic.
* Extension points/instances designate places where custom scripts can be called and then processed to extend base functionality.
{#creating-custom-csm-user-roles__ul_rcf_5td_ydb}

The system administrator can use the extension points/instances to create their own role access
constants file similar to CSQueryBRUtilOOBConstants.  
The system administrator can create a new extension instance for the existing extension point and use it to define custom role configuration constants. The following items are included with the Customer Service Management application:

* global.CSQeryExtensionPoint: the provided extension point for CSM role configuration
* instance.CSQueryExtensioninstanceOOB: the provided extension instance for CSM role configuration
{#creating-custom-csm-user-roles__ul_vm2_mtd_ydb}

To create a new role:

1. Create a new constant file to hold the configurations for the new role similar to CSQueryBRUtilOOBConstants. For example:

       CSQueryBRUtilOOBConstantstest.ROLE_PERMISSIONS_POOL = {
          'sn_customerservice.customer_new_role':{ 'sn_customerservice_case':{'condition':['my_new_condition']},
       } ,

2. Create a new extension instance to hold the logic returning this new constant file to CSQueryBRUtil.
3. Make sure this role is on the instance and contains the sn_esm_user role.
4. Assign this new role to a contact.
5. Create or modify the ACLs and query business rules for this role as necessary.

{#creating-custom-csm-user-roles__ol_wm2_mtd_ydb}

For more information about modifying ACLs and query business rules, see [KB0685767](https://support.servicenow.com/nav_to.do?uri=/kb_view.do?sysparm_article=KB0685767&sysparm_stack=&sysparm_view=).
**Related topics**   

* [Using extension points to extend application functionality](https://www.servicenow.com/docs/access?context=extension-points&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US)
* [Using scripted extension points in server-side scripts](https://www.servicenow.com/docs/access?context=scripted-extension-points&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US)
* [Using UI extension points in server-side UI macros](https://www.servicenow.com/docs/access?context=ui-extension-points&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US)
* [Using client extension points in client-side UI scripting](https://www.servicenow.com/docs/access?context=client-extension-points&version=xanadu&pubname=xanadu-api-reference&ft:locale=en-US)

