- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2019 09:14 PM
Hi,
Is there a server equivalent of g_user.hasRoleExactly
gs.hasRole returns true for admin and userHasRoleExactly works only client side
Regards,
Sreedhar
Solved! Go to Solution.
- Labels:
-
Incident Management
- 5,896 Views
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-29-2019 09:52 PM
Hi Sreedhar,
you don't have server side function for that; use below code and store it in some script include; then you can call this and re-use it like from every server side script
hasRoleExactlyServerSide: function(){
var au = new ArrayUtil();
var roles = gs.getSession().getRoles() + '';
var roleArray = roles.split(",");
var isRolePresent = au.contains(roleArray, role);
return isRolePresent;
}
Mark Correct if this solves your issue and also mark Helpful if you find my response worthy based on the impact.
Thanks
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-27-2024 09:13 AM
this is also checking contains by getting the index of the role and is not checking the 'exactly' validation for the role
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
12-03-2024 09:14 AM
so the problem with indexOf, is that it don't natively understand partial names overlaps.
e.g. a roll called xyz and a roll called xyz_user
if xzy is what you looked for and the user had xyz_user it would return true whan you didn't want it to.
still a good solution, but require naming convention.
or or something like (...getRoles().toString() + ',').indexOf (roleName+',')
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
08-27-2024 08:56 AM
au.contains(roleArray, role);
We are checking contains here, it is similar to hasRole and not hasRoleExactly()
If Manager has Assessor role.
and I need to put validation for hasRoleExactly('Assessor'), contains method will give True for a user who is Manager.
Did anyone find any other way ?
I tried putting inherit=false as additional condition in query while fetching list of roles and it is not always the case when using Groups to assign roles to user.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
06-30-2019 07:21 AM
Hi Sreedhar,
Can you also mark answer as helpful.
Regards
Ankur
Ankur
✨ Certified Technical Architect || ✨ 9x ServiceNow MVP || ✨ ServiceNow Community Leader
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-10-2024 06:24 AM
Hi,
As per the solution it should be > -1 in below code instead of > 0
if (gs.getSession().getRoles().toString().indexOf(roleName)>0)
It should be if (gs.getSession().getRoles().toString().indexOf(roleName) > -1)