internal void FilterBasedOnPermissions(IList items, IUser user) { var length = items.Count; if (length > 0) { var ids = new List <int>(); for (var i = 0; i < length; i++) { ids.Add(((dynamic)items[i] !).Id); } //get all the permissions for these nodes in one call EntityPermissionCollection permissions = _userService.GetPermissions(user, ids.ToArray()); var toRemove = new List <dynamic>(); foreach (dynamic item in items) { //get the combined permission set across all user groups for this node //we're in the world of dynamics here so we need to cast var nodePermission = ((IEnumerable <string>)permissions.GetAllPermissions(item.Id)).ToArray(); //if the permission being checked doesn't exist then remove the item if (nodePermission.Contains(_permissionToCheck.ToString(CultureInfo.InvariantCulture)) == false) { toRemove.Add(item); } } foreach (dynamic item in toRemove) { items.Remove(item); } } }
public Dictionary <int, string[]> GetPermissions(int[] nodeIds) { EntityPermissionCollection permissions = _userService .GetPermissions(_backofficeSecurityAccessor.BackOfficeSecurity?.CurrentUser, nodeIds); var permissionsDictionary = new Dictionary <int, string[]>(); foreach (var nodeId in nodeIds) { var aggregatePerms = permissions.GetAllPermissions(nodeId).ToArray(); permissionsDictionary.Add(nodeId, aggregatePerms); } return(permissionsDictionary); }