User criteria match all on location and group

Daniela18
Tera Contributor

Hi

I want a user criteria to both match user group and a location that is on the user.

But this doesn't work. Do I have to script? I am novice at scripting, How would such a script look?

find_real_file.png

1 ACCEPTED SOLUTION

Hi,

I would encourage to have step by step debug

1) check if member of Hardware is able to access the catalog

Keep Script as: Test with user

answer = gs.getUser().isMemberOf('Hardware');

Next

2) check if user's location condition is satisfied

Keep Script as: Test with user having that location

answer = ifScript();

function ifScript(){

var user = new GlideRecord('sys_user');
user.addQuery('sys_id', gs.getUserID());
user.addQuery('location', '25ab9d720a0a0bb300793d3a6b891f82');
user.query();

var locationValid = user.hasNext();

return locationValid;

}

3) Now combine both the codes and check by adding logs

If my answer solved your issue, please mark my answer as Correct & 👍Helpful based on the Impact.

Regards
Ankur

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

View solution in original post

19 REPLIES 19

Hi,

Did you add logs to verify which flag is not coming as true

answer = isValid();

function isValid(){

var isMember = gs.getUser().isMemberOf('Hardware');

gs.info('isMember is ' + isMember);

var user = new GlideRecord('sys_user');
user.addQuery('sys_id', gs.getUserID());
user.addQuery('location', '25ab9d720a0a0bb300793d3a6b891f82');
user.query();

var locationValid = user.hasNext();

gs.info('locationValid is: ' + locationValid);

if(isMember == true && locationValid == true){
return true;

}
else{
return false;

}

}

Regards
Ankur

 

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

I tried this script. Now no-one can see it, regardless :-P. I tried it in my own instance and then impersonated a user that is both member of hardware and the adress and she cannot access it at all.

Isn't it enough to have Hardware in the group and only base script solely on the location?

 

Hi Daniela,

through above script when both condition match then it would evaluate to true

What came in for logs did you check

Regards
Ankur

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

so the logs doesnt really tell me anything.

I removed your script and added it again and saved and then tried again. If a user does not have neither location or hardware, it cannot access at all

But if the user has the hardware but not the location, it can access

in logs it says: 

Hi,

please try this

answer = isValid();

function isValid(){

var isMember = gs.getUser().isMemberOf('Hardware');

gs.info('isMember is ' + isMember);

var user = new GlideRecord('sys_user');
user.addQuery('sys_id', gs.getUserID());
user.addQuery('location', '25ab9d720a0a0bb300793d3a6b891f82');
user.query();

var locationValid = user.hasNext();

gs.info('locationValid is: ' + locationValid);

if(isMember.toString() == 'true' && locationValid.toString() == 'true'){
return true;

}
else{
return false;

}

}

If my answer solved your issue, please mark my answer as Correct & 👍Helpful based on the Impact.

Regards
Ankur

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