Advanced User Criteria

Wilwod
Tera Expert

Hi all, 

 

I am writing a code to group users into a criteria if they are both not a user of groups with the words "Technical Team" in the group title, and their location type is not "X"

 

function eligableUser() {
    var answer = '';
    var user = GlideUser.getUserByID(user_id);
    var userName = new GlideRecord('sys_user');
    userName.addEncodedQuery('sys_id', user);
    userName.query(); // Get logged in user record

    while (userName.next()) {
        var userLoc = userName.location.cmn_location_type; //Get user locaiton type
        var grMem = new GlideRecord('sys_user_grmember');
        grMem.addQuery('user', user);
        grMem.query(); // Find users groups

        while (grMem.next()) { //Iterate though associated users' groups
            if (userLoc == 'X' && grMem.group.name.indexOf("Technical Team") > -1) { //See if any groups contain "Technical Team" and user is X user
                answer = true;
                break; //exit loop if condition found
            } else {
                answer = false;
            }
        }
    }
}

eligableUser();

However, when putting this Criteria into "Not Available For" on a Catalog item, upon impersonating a matching user, the item still appears and is not hidden as expected. 

 

Could I please ask for some help here, as I am not sure what I am getting wrong. Thank you 

1 REPLY 1

Swapna Abburi
Mega Sage
Mega Sage

Hi @Wilwod 

 

Please update your script as below.

 

function eligableUser() {
    var answer = '';
    var user = gs.getUserID();
    var userName = new GlideRecord('sys_user');
    userName.addEncodedQuery('sys_id='+user);
    userName.query(); // Get logged in user record

    while (userName.next()) {
        var userLoc = userName.location.cmn_location_type; //Get user locaiton type
        var grMem = new GlideRecord('sys_user_grmember');
        grMem.addQuery('user', user);
        grMem.query(); // Find users groups

        while (grMem.next()) { //Iterate though associated users' groups
            if (userLoc == 'X' && grMem.group.name.indexOf("Technical Team") > -1) { //See if any groups contain "Technical Team" and user is X user
                answer = true;
                return answer;
                break; //exit loop if condition found
            } else {
                answer = false;
                return answer;
            }
        }
    }
}

eligableUser();