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.

Enable Service Desk staff to view delegate records

TriWorks
Tera Contributor

Good morning,

I've crafted a custom ACL on sys_user_delegate with READ rights. I'm hoping to allow our Service Desk agents to have insight into a manager's delegate. However, applying this role to a Service Desk agent doesn't give them access to view delegates.  (if they navigate to ALL > Delegates they receive no result).  Admittedly, ACL's aren't my strong suit. 

Is there an OOB way to provide the above capability, perhaps? I only see the Admin role applying on the sys_user_delegate table, currently, and that's clearly overkill. I simply need my agents to have visibility on (a) does a manager have a delegate configured and (b) who is the delegate? 

 

Any advice is appreciated! 

1 ACCEPTED SOLUTION

MaxMixali
Giga Guru

ServiceNow – Granting Read-Only Access to sys_user_delegate for Service Desk Agents

Issue:
By default, the sys_user_delegate table in ServiceNow is restricted to admin roles. Service Desk agents cannot view delegate records, even if a custom ACL with READ rights is added.

Goal:
Allow Service Desk agents to see (a) whether a manager has a delegate and (b) who that delegate is, without granting admin privileges.

---

1. Understanding sys_user_delegate ACL Behavior
- Table: sys_user_delegate
- Default access: Only admin or delegate_admin roles
- Fields: delegate_from (manager), delegate_to (delegate), assignment type, start/end dates

The table is secured due to its sensitive delegation data.

---

2. Create a Read-Only Role (Recommended Safe Option)

Step 1: Create a new role
Name: delegate_viewer

Step 2: Create a new Access Control
Navigate to: System Security → Access Control (ACL)
- Type: record
- Operation: read
- Name: sys_user_delegate
- Requires Role: delegate_viewer

Step 3: Add condition (optional)
For full visibility:
answer = gs.hasRole('delegate_viewer');

For restricted visibility (same department only):
var currentManager = current.delegate_from;
if (gs.hasRole('delegate_viewer') && currentManager.department == gs.getUser().getRecord().department) {
answer = true;
} else {
answer = false;
}

Step 4: Assign Role
Grant delegate_viewer to the Service Desk Agent role or group.

---

3. Validate Access
After applying the ACL:
- Log in as a Service Desk agent
- Navigate to All → Delegates
- Verify records appear

If no results, check:
- ACL evaluation (System Security → Debug Security Rules)
- Role inheritance
- No conflicting “deny” ACLs exist

---

4. Out-of-Box Alternatives

Option A: Read-Only Report or Dashboard
Create a report on sys_user_delegate showing:
- Delegate from
- Delegate to
- Active
- Assignment Type
Grant access via roles instead of modifying ACLs.

Option B: Related List on sys_user Form
Add a “Delegates” related list to the User form (visible to Service Desk role).
Restrict fields or records via ACL or UI Policy.

Option C: Script Include for Portal/UI Widget
Expose data safely using a Script Include:
var DelegateHelper = Class.create();
DelegateHelper.prototype = {
getDelegatesForManager: function(managerSysId) {
var gr = new GlideRecord('sys_user_delegate');
gr.addQuery('delegate_from', managerSysId);
gr.addQuery('active', true);
gr.query();
var delegates = [];
while (gr.next()) {
delegates.push({
manager: gr.delegate_from.getDisplayValue(),
delegate: gr.delegate_to.getDisplayValue(),
type: gr.assignment_type
});
}
return delegates;
},
type: 'DelegateHelper'
};

---

5. Security Considerations
- Grant only read access (no write/delete)
- Hide unnecessary fields using field ACLs
- For portals, use REST or GlideAjax with filtered data

---

6. Recommended Best Practice
| Goal | Approach |
|------|-----------|
| Agents need full read-only access | Create role delegate_viewer + read ACL |
| Agents see only manager’s delegates | Use related list/report |
| Portal/Widget visibility | Script Include with GlideRecord |

---

TL;DR
There’s no out-of-box non-admin role to view sys_user_delegate.
To safely allow visibility:
- Create delegate_viewer role
- Add read ACL on sys_user_delegate
- Assign to Service Desk Agents
Optionally, use reports or related lists for OOB-safe visibility.

 

View solution in original post

2 REPLIES 2

MaxMixali
Giga Guru

ServiceNow – Granting Read-Only Access to sys_user_delegate for Service Desk Agents

Issue:
By default, the sys_user_delegate table in ServiceNow is restricted to admin roles. Service Desk agents cannot view delegate records, even if a custom ACL with READ rights is added.

Goal:
Allow Service Desk agents to see (a) whether a manager has a delegate and (b) who that delegate is, without granting admin privileges.

---

1. Understanding sys_user_delegate ACL Behavior
- Table: sys_user_delegate
- Default access: Only admin or delegate_admin roles
- Fields: delegate_from (manager), delegate_to (delegate), assignment type, start/end dates

The table is secured due to its sensitive delegation data.

---

2. Create a Read-Only Role (Recommended Safe Option)

Step 1: Create a new role
Name: delegate_viewer

Step 2: Create a new Access Control
Navigate to: System Security → Access Control (ACL)
- Type: record
- Operation: read
- Name: sys_user_delegate
- Requires Role: delegate_viewer

Step 3: Add condition (optional)
For full visibility:
answer = gs.hasRole('delegate_viewer');

For restricted visibility (same department only):
var currentManager = current.delegate_from;
if (gs.hasRole('delegate_viewer') && currentManager.department == gs.getUser().getRecord().department) {
answer = true;
} else {
answer = false;
}

Step 4: Assign Role
Grant delegate_viewer to the Service Desk Agent role or group.

---

3. Validate Access
After applying the ACL:
- Log in as a Service Desk agent
- Navigate to All → Delegates
- Verify records appear

If no results, check:
- ACL evaluation (System Security → Debug Security Rules)
- Role inheritance
- No conflicting “deny” ACLs exist

---

4. Out-of-Box Alternatives

Option A: Read-Only Report or Dashboard
Create a report on sys_user_delegate showing:
- Delegate from
- Delegate to
- Active
- Assignment Type
Grant access via roles instead of modifying ACLs.

Option B: Related List on sys_user Form
Add a “Delegates” related list to the User form (visible to Service Desk role).
Restrict fields or records via ACL or UI Policy.

Option C: Script Include for Portal/UI Widget
Expose data safely using a Script Include:
var DelegateHelper = Class.create();
DelegateHelper.prototype = {
getDelegatesForManager: function(managerSysId) {
var gr = new GlideRecord('sys_user_delegate');
gr.addQuery('delegate_from', managerSysId);
gr.addQuery('active', true);
gr.query();
var delegates = [];
while (gr.next()) {
delegates.push({
manager: gr.delegate_from.getDisplayValue(),
delegate: gr.delegate_to.getDisplayValue(),
type: gr.assignment_type
});
}
return delegates;
},
type: 'DelegateHelper'
};

---

5. Security Considerations
- Grant only read access (no write/delete)
- Hide unnecessary fields using field ACLs
- For portals, use REST or GlideAjax with filtered data

---

6. Recommended Best Practice
| Goal | Approach |
|------|-----------|
| Agents need full read-only access | Create role delegate_viewer + read ACL |
| Agents see only manager’s delegates | Use related list/report |
| Portal/Widget visibility | Script Include with GlideRecord |

---

TL;DR
There’s no out-of-box non-admin role to view sys_user_delegate.
To safely allow visibility:
- Create delegate_viewer role
- Add read ACL on sys_user_delegate
- Assign to Service Desk Agents
Optionally, use reports or related lists for OOB-safe visibility.

 

TriWorks
Tera Contributor

Thanks for the reply! I'll review and proceed accordingly.