%# BEGIN BPS TAGGED BLOCK {{{ %# %# COPYRIGHT: %# %# This software is Copyright (c) 1996-2006 Best Practical Solutions, LLC %# %# %# (Except where explicitly superseded by other copyright notices) %# %# %# LICENSE: %# %# This work is made available to you under the terms of Version 2 of %# the GNU General Public License. A copy of that license should have %# been provided with this software, but in any event can be snarfed %# from www.gnu.org. %# %# This work is distributed in the hope that it will be useful, but %# WITHOUT ANY WARRANTY; without even the implied warranty of %# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU %# General Public License for more details. %# %# You should have received a copy of the GNU General Public License %# along with this program; if not, write to the Free Software %# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. %# %# %# CONTRIBUTION SUBMISSION POLICY: %# %# (The following paragraph is not intended to limit the rights granted %# to you to modify and distribute this software under the terms of %# the GNU General Public License and is only of importance to you if %# you choose to contribute your changes and enhancements to the %# community by submitting them to Best Practical Solutions, LLC.) %# %# By intentionally submitting any modifications, corrections or %# derivatives to this work, or any other work intended for use with %# Request Tracker, to Best Practical Solutions, LLC, you confirm that %# you are the copyright holder for those contributions and you grant %# Best Practical Solutions, LLC a nonexclusive, worldwide, irrevocable, %# royalty-free, perpetual, license to use, copy, create derivative %# works based on those contributions, and sublicense and distribute %# those contributions and any derivatives thereof. %# %# END BPS TAGGED BLOCK }}} <& /Elements/Header, Title => loc("Delegate rights") &> <& /User/Elements/Tabs, current_tab => 'User/Delegation.html', Title => loc("Delegate rights") &> <& /Elements/ListActions, actions => \@results &> <& Elements/DelegateRights, personalgroups => $personalgroups, objects => $objects, ObjectType => 'RT::System' &> <& Elements/DelegateRights, personalgroups => $personalgroups, objects => $objects, ObjectType => 'RT::Queue' &> <& Elements/DelegateRights, personalgroups => $personalgroups, objects => $objects, ObjectType => 'RT::Group' &> <& /Elements/Submit, Label => loc('Modify Rights') &> <%INIT> my (@results, $arg); foreach $arg (keys %ARGS) { next unless ($arg =~ /^Delegate-Existing-ACE-(\d+)-to-(\d+)-as-(\d+)$/); my $parent = $1; my $principal = $2; my $delegation = $3; unless ($ARGS{"Delegate-ACE-$1-to-$2"}) { my $ace_to_del = RT::ACE->new($session{'CurrentUser'}); $ace_to_del->Load($delegation); my ($delval, $delmsg) = $ace_to_del->Delete(); push (@results, $delmsg); } } foreach $arg (keys %ARGS) { next unless ($arg =~ /^Delegate-ACE-(\d+)-to-(\d+)$/); my $parent = $1; my $principal = $2; # if we already delegate it, we just don't care next if (grep /^Delegate-Existing-ACE-$parent-to-$principal-/, keys %ARGS); my $ace = RT::ACE->new($session{'CurrentUser'}); $ace->Load($1); unless ($ace->Id) { push (@results, loc('Right not found')); next; } my ($delid, $delmsg) = $ace->Delegate(PrincipalId => $principal); push (@results, $delmsg); } my $personalgroups = RT::Groups->new($session{'CurrentUser'}); $personalgroups->LimitToPersonalGroupsFor($session{'CurrentUser'}->PrincipalId); my $objects; my $acl = RT::ACL->new ($session{'CurrentUser'}); $acl->ExcludeDelegatedRights(); $acl->LimitToPrincipal(Id => $session{'CurrentUser'}->PrincipalId, IncludeGroupMembership => 1 ); while(my $right = $acl->Next) { push @{$objects->{$right->ObjectType}{$right->ObjectId}},$right; }