X-Git-Url: http://git.freeside.biz/gitweb/?a=blobdiff_plain;f=rt%2Flib%2FRT%2FGroups.pm;h=576c99dc9b5798a4b5a88e00fb240421ef716e7a;hb=2c09925cad2ade037e6ae953e4ed6fc056811f2f;hp=c2348584e0ca7aa4df50c8c2b510e59a8b1de7fb;hpb=45ac1a8f1af9c7d63d296497a305b82f07eccab6;p=freeside.git diff --git a/rt/lib/RT/Groups.pm b/rt/lib/RT/Groups.pm index c2348584e..576c99dc9 100755 --- a/rt/lib/RT/Groups.pm +++ b/rt/lib/RT/Groups.pm @@ -2,7 +2,7 @@ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2014 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2015 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -240,6 +240,15 @@ sub WithMember { return $members; } +sub WithCurrentUser { + my $self = shift; + $self->{with_current_user} = 1; + return $self->WithMember( + PrincipalId => $self->CurrentUser->PrincipalId, + Recursively => 1, + ); +} + sub WithoutMember { my $self = shift; my %args = ( @@ -427,22 +436,16 @@ sub LimitToDeleted { -sub Next { +sub AddRecord { my $self = shift; + my ($record) = @_; - # Don't show groups which the user isn't allowed to see. + # If we've explicitly limited to groups the user is a member of (for + # dashboard or savedsearch privacy objects), skip the ACL. + return unless $self->{with_current_user} + or $record->CurrentUserHasRight('SeeGroup'); - my $Group = $self->SUPER::Next(); - if ((defined($Group)) and (ref($Group))) { - unless ($Group->CurrentUserHasRight('SeeGroup')) { - return $self->Next(); - } - - return $Group; - } - else { - return undef; - } + return $self->SUPER::AddRecord( $record ); }