summaryrefslogtreecommitdiff
path: root/rt/lib/RT/Groups.pm
diff options
context:
space:
mode:
Diffstat (limited to 'rt/lib/RT/Groups.pm')
-rwxr-xr-xrt/lib/RT/Groups.pm31
1 files changed, 17 insertions, 14 deletions
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
# <sales@bestpractical.com>
#
# (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 );
}