server equivalent of hasroleExactly

sreedharkaliset
Mega Expert

Hi,

Is there a server equivalent of g_user.hasRoleExactly

gs.hasRole returns true for admin and userHasRoleExactly works only client side

 

Regards,

Sreedhar

1 ACCEPTED SOLUTION

Ankur Bawiskar
Tera Patron
Tera Patron

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

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

View solution in original post

10 REPLIES 10

Ankur Bawiskar
Tera Patron
Tera Patron

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

Regards,
Ankur
✨ Certified Technical Architect  ||  ✨ 9x ServiceNow MVP  ||  ✨ ServiceNow Community Leader

Hello,

 

I'm a little late to the party here, I know.  I like your solution, Ankur, but I think you could make it even simpler.

You don't have to do the whole array work that you did.  

function hasRoleExactly(roleName){
  if (gs.getSession().getRoles().toString().indexOf(roleName)>0){
    return true;
  } else {
    return false;
  }
}

I know that's a little overly complex, but I like my code to be readable, and that, to me, makes it clear what it is doing.  If you wanted to go really simple, where you want to do

if (gs.getUser().hasRoleExactly(roleName)){  // <--function doesn't exist
  //do some code
}

you could do

if (gs.getSession().getRoles().toString().indexOf(roleName)>0){
  //do something
}

and not even worry about creating a script include or a function for it.

Thanks. That last bit worked a treat for me in the condition field of a business rule. 

You're welcome!  I'm glad it helped you!