Join the #BuildWithBuildAgent Challenge! Get recognized, earn exclusive swag, and inspire the ServiceNow Community with what you can build using Build Agent.  Join the Challenge.

Look for ServiceNow API to check access to em_event table

Mei1
Tera Contributor

Hi, I would like to check if a ServiceNow user has enough roles and access controls to create event in em_event table. I wonder if I can use this GET REST API to find out:

 

https://devxxxx.service-now.com/api/now/table/em_event?sysparm_limit=1

 

The purpose is to check first, then use the following POST REST API to create events in em_event table:

/api/global/em/jsonv2

 

Since the POST API is not a table API, I concern if the GET API is correct. Please advise. Thanks!

1 ACCEPTED SOLUTION

sadif_raja
Tera Guru

 

To check if a ServiceNow user has sufficient roles and access controls to create events in the `em_event` table, the **GET** API request you're using may not be the best option. The **GET** API only checks if the user has read access, but doesn’t guarantee create permissions for the POST request.

Here’s a better approach:

1. **Use the GET API with sys_metadata privileges**: Check the user’s access using a `GET` request to the `sys_user_has_role` table to confirm if the user has the necessary roles for creating events.

```bash
GET https://devxxxx.service-now.com/api/now/table/sys_user_has_role?sysparm_query=user=<user_id>^role=<required_role>
```

2. **Validate Access via the POST API**: Instead of just relying on a `GET` from the `em_event` table, you could test your user’s permissions directly by attempting a **POST** with a test event in `em_event` using the `/api/global/em/jsonv2` endpoint. If the call fails, you'll know the user doesn’t have the required permissions.

3. **Use Glide System Functions (if testing manually)**: Alternatively, if testing in a script, you can use ServiceNow's `GlideRecord` or `gs.hasRole()` to check if the user has the required role(s) for event creation.

This will give you a more accurate validation of create permissions than simply relying on a **GET** API call.

View solution in original post

2 REPLIES 2

sadif_raja
Tera Guru

 

To check if a ServiceNow user has sufficient roles and access controls to create events in the `em_event` table, the **GET** API request you're using may not be the best option. The **GET** API only checks if the user has read access, but doesn’t guarantee create permissions for the POST request.

Here’s a better approach:

1. **Use the GET API with sys_metadata privileges**: Check the user’s access using a `GET` request to the `sys_user_has_role` table to confirm if the user has the necessary roles for creating events.

```bash
GET https://devxxxx.service-now.com/api/now/table/sys_user_has_role?sysparm_query=user=<user_id>^role=<required_role>
```

2. **Validate Access via the POST API**: Instead of just relying on a `GET` from the `em_event` table, you could test your user’s permissions directly by attempting a **POST** with a test event in `em_event` using the `/api/global/em/jsonv2` endpoint. If the call fails, you'll know the user doesn’t have the required permissions.

3. **Use Glide System Functions (if testing manually)**: Alternatively, if testing in a script, you can use ServiceNow's `GlideRecord` or `gs.hasRole()` to check if the user has the required role(s) for event creation.

This will give you a more accurate validation of create permissions than simply relying on a **GET** API call.

Mei1
Tera Contributor

Hi @sadif_raja , thank you very much for your reply. The options are very helpful. I will experiment 1 and 2.

3 is not applicable to my case because the work is in java, no script, but it is really good to know.

 

Thanks!