gs.getUser().hasRole('anytext') always returns "true"

Vespertinus
Tera Expert

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

1 ACCEPTED SOLUTION

javier_messeri
Kilo Expert

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


View solution in original post

19 REPLIES 19

Taha El alami
Kilo Sage
Kilo Sage

 

gs.isLoggedIn() && gs.getUser().hasRole('role')

Sebastian7
Kilo Contributor

Great Job Vespertinus!

Heiko
Kilo Contributor

Super, THX!

bandi
Tera Contributor

Hi 

I have duplicate roles and duplicate group , if i will try to add already existing role to the same user its allowing ... how to solve this problem 

 

Thanks & Regards,

Bandi

Suggy
Giga Sage

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)