Need to check login user is member of Analytics, Managers (assignment group).

praveen1231
Tera Contributor

Hello everyone,

I need to ensure that a ticket can only be submitted if the logged-in user is a member of any one of the following groups: Analytics, Managers, App Engine Admins, or App Engine Studio. For example, if the user selects an assignment group as Change Management, logged-in must be a member of Change Management and above mentioned groups. If the user does not belong to any of these groups and the selected assignment group, they should not be able to submit the ticket. A warning message should be displayed to the user before submission to indicate this restriction. Please help me to solve this work. This is high priority task. Thank you.

 

Best Regards,

Praveen Rajan

8 REPLIES 8

Vrushali  Kolte
Mega Sage

Hello @praveen1231 ,

 

For your requirement you need to create onSubmit client script as below -

function onSubmit() {
    var userID = g_user.userID;
    var assignmentGroup = g_form.getValue('assignment_group'); // Adjust as necessary

    // Groups to check
    var requiredGroups = ['Analytics', 'Managers', 'App Engine Admins', 'App Engine Studio'];

    // GlideAjax to call server-side script
    var ga = new GlideAjax('CheckUserGroupMembership');
    ga.addParam('sysparm_name', 'validateUserGroups');
    ga.addParam('sysparm_user_ID', userID);
    ga.addParam('sysparm_requiredGroups', requiredGroups.join(','));
    ga.addParam('sysparm_assignmentGroup', assignmentGroup);

    var isValid = ga.getXMLWait();
    if (isValid.responseXML.documentElement.getAttribute('answer') == 'false') {
        alert('You must be a member of one of the following groups: ' + requiredGroups.join(', ') + ' and the selected assignment group.');
        return false; // Prevent submission
    }

    return true; // Allow submission
}

 

Script Include Function -

validateUserGroups: function() {
        var userID = this.getParameter('sysparm_user_ID');
        var requiredGroups = this.getParameter('sysparm_requiredGroups').split(',');
        var assignmentGroup = this.getParameter('sysparm_assignmentGroup');

        // Check if the user belongs to the required groups
        var userGroups = new GlideRecord('sys_user_grmember');
        userGroups.addQuery('user', userID);
        userGroups.query();

        var belongsToRequiredGroup = false;
        var belongsToAssignmentGroup = false;

        while (userGroups.next()) {
            var groupName = userGroups.group.name.toString();
            if (requiredGroups.indexOf(groupName) > -1) {
                belongsToRequiredGroup = true;
            }
            if (groupName == assignmentGroup) {
                belongsToAssignmentGroup = true;
            }
        }

        // Return true if the user belongs to any required group and the assignment group, otherwise false
        return (belongsToRequiredGroup && belongsToAssignmentGroup) ? 'true' : 'false';
    }
});

 

If my answer solves your issue, please mark it as Accepted✔️ & Helpful👍 !

Hi @Vrushali Kolte  Thanks for your valuable timing. But it not working as we expected.

praveen1231_0-1723034345526.png

Facing error as onSubmit script error: TypeError: Cannot read properties of undefined (reading 'documentElement'): function () { [native code] }
Can you please help me to resolve it. Thanks in advanced.

 

Hello @praveen1231 , thanks for the response. Can you update the code as below -

 

function onSubmit() {
    var userID = g_user.userID;
    var assignmentGroup = g_form.getValue('assignment_group'); // Adjust as necessary

    // Groups to check
    var requiredGroups = ['Analytics', 'Managers', 'App Engine Admins', 'App Engine Studio'];

    // GlideAjax to call server-side script
    var ga = new GlideAjax('CheckUserGroupMembership');
    ga.addParam('sysparm_name', 'validateUserGroups');
    ga.addParam('sysparm_user_ID', userID);
    ga.addParam('sysparm_requiredGroups', requiredGroups.join(','));
    ga.addParam('sysparm_assignmentGroup', assignmentGroup);
    ga.getXMLWait(isValid);
   
    function isValid(response) {
      var answer = response.responseXML.documentElement.getAttribute("answer");
     alert(answer);
     if(answer == false ){
        return false; / Prevent submission
     } else {
         return true; // Allow submission
     }
    }    

}

Hi @Vrushali Kolte Thanks for your update.

praveen1231_0-1723036047385.png

Change Management should only allow ticket submissions by logged in users who are members of at least one of the following groups: 'Analytics', 'Managers', 'App Engine Admins', or 'App Engine Studio'. Currently, it allows submissions from any user, regardless of their group membership.