
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-11-2017 05:23 AM
I figured aut a strange behaviour with hasRole() function. We are on Istanbul Patchlevel 4
You can reproduce by opening background scripts winodow and run following script:
gs.log(gs.getUser().getDisplayName())
gs.log(gs.getUser().getRoles())
gs.log(gs.getUser().hasRole('gdfgsdrfr'))
[0:00:00.002] Script completed in scope global: script
*** Script: System Administrator
*** Script: admin,template_editor_global
*** Script: true
-> users display name is correct
-> roles are corre
-> true???
http://wiki.servicenow.com/index.php?title=Getting_a_User_Object#gsc.tab=0
myUserObject.hasRole()
-- returns true or false if the current user has the provided role (takes a role name as its argument)
For me it returns always true 😕
Any clue?
br
Vesp
Solved! Go to Solution.
- Labels:
-
Best Practices
-
Scripting and Coding
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-11-2017 05:30 AM
Hi,
I think "hasRole('whatever')" always returns true if you are the admin (http://wiki.servicenow.com/index.php?title=GlideSystem#hasRole.28String.29 ), no wonder if the role really exists or not.
There's a g_user.hasRoleExactly() (client side, http://wiki.servicenow.com/index.php?title=GlideUser_(g_user)#hasRoleExactly ) but not an explicit version in server side, but by scripting a little bit, you may have and have a "hasRoleExactly" for server, something like:
var rol = new GlideRecord('sys_user_role');
rol.addQuery('name', role);
rol.query();
if (rol.next()) {
var hasRole = new GlideRecord('sys_user_has_role');
hasRole.addQuery('user', user_id);
hasRole.addQuery('role', rol.sys_id);
hasRole.query();
if (hasRole.next()) {
return true;
} else {
return false;
}
}
return false;
Cheers,
Javier
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎08-31-2020 06:13 PM
gs.isLoggedIn() && gs.getUser().hasRole('role')
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-19-2021 01:01 AM
Great Job Vespertinus!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎05-06-2021 12:58 AM
Super, THX!
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎04-11-2022 03:38 AM
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
‎01-19-2025 04:44 AM
g_user.hasRole('xyz'); and gs.hasRole('xyz'); ----------- will always be true for admin
For client side, use : g_user.hasRoleExactly('xyz');
and
For server side, use:
if (gs.getUser().getRoles().indexOf('xyz') >= 0)