The Zurich release has arrived! Interested in new features and functionalities? Click here for more

Script ACL

Pastupe
Mega Guru

Hello

Im getting lost in scripting ACL

What I need is to create ACL where:

User can see only tickets where user is member of group to which ticket is either assigned or watchlisted

Anyone know how to do it?

With the below script Im not getting correct results for READ ACL.

See it below, it should give me back 6 records to read and it giving me back just 3, why ?

please help

/Petr

find_real_file.png

find_real_file.png

find_real_file.png

1 ACCEPTED SOLUTION

As noted before, try it with one ACL criteria and two ACLs. Debug the one to determine group membership first. Test it, get it working, etc. If someone comes along later and says "No, we don't need that" it's a simple matter of deactivating it rather than modifying code. Don't pile both bits of logic in one ACL.



ACL 1:


answer = gs.getUser().isMemberOf(current.u_assignment_group.getDisplayValue());



ACL 2:



var result = false;


var list = current.u_support_team_involved.toString().split(',');


for (var i = 0; i < list.length; i++) {


        var grp = new GlideRecord('sys_user_group');


        grp.get(list[i]);


        if (gs.getUser().isMemberOf(grp.getDisplayValue()) {


                  result = true;


                  break;


        }


}



answer = result;


View solution in original post

23 REPLIES 23

Ulrich Jugl
ServiceNow Employee
ServiceNow Employee

Which means you have two groups with the name HR Global, but with different sys_ids? Can you check, if your user you use for testing is member of both groups? Otherwise your ACLs work as expected, as the user seems not to be member of both groups.


This is strange really, because if I run report based on AG name, I get again 1 record back, so at the end I have really just 1 group



/Petr


find_real_file.png


Ulrich Jugl
ServiceNow Employee
ServiceNow Employee

And if you do the same on the Condition of the u_hr table? If you filter for u_assignment_group.sys_id = ''?


I have got something strange


with ACL 2 it seems to be working, but only for new tickets which are


Some tickets still not in the list even they fulfil ACL criteria - e.g. HR0000137 - img below



If I create ticket from scratch, it then works and is displayed



Have you idea what could be behind?



/Petr


200a.png


Ulrich Jugl
ServiceNow Employee
ServiceNow Employee

Untested, but try:



answer = userIsMemberOfGroup();


function userIsMemberOfGroup() {


var supportTeams = current.getValue('u_support_team_involved');


var assignmentGroup = current.getValue('u_assignment_group');


var arr = supportTeams.split(',');


arr.push(assignmentGroup);



for (var i = 0; i < arr.length; i++) {


        //check if user is member of current group


        if (gs.getUser().isMemberOf(arr[i].toString())) {


                  return true;


        }


}


}