GrantShowTicket

From Request Tracker Wiki
Jump to navigation Jump to search

In our organization we often have tickets that are linked with a dependency link. The role AdminCCs is given permission to see a ticket, but they could not see other tickets that their specific ticket depended on. This code makes it possible to view a ticket if the AdminCc has permission to see a ticket that is depended on by a ticket they could see.

Ticket_Local.pm:

use strict;
no warnings qw(redefine);

sub HasRight {
   my $self = shift;
   my %args = (
       Right     => undef,
       Principal => undef,
       @_
   );

   unless ( ( defined $args{'Principal'} ) and ( ref( $args{'Principal'} ) ) )
   {
       Carp::cluck;
       $RT::Logger->crit("Principal attrib undefined for Ticket::HasRight");
       return(undef);
   }

   my @Equiv;
   if ($args{Right} eq 'ShowTicket') {
       my $deps = RT::Tickets->new($self->CurrentUser);

       $deps->LimitDependsOn($self->Id);
       while (my $tick = $deps->Next) {
           push @Equiv, $tick;
       }
   }


   return (
       $args{'Principal'}->HasRight(
           Object => $self,
           EquivObjects => \@Equiv,
           Right     => $args{'Right'}
         )
   );
}

1;

This could be extended to recursively add all tickets in a dependency chain. Note that this does not give the user rights to the transaction, but that can be accomplished in a similar manner.

--Todd Chapman