[Rt-commit] rt branch, 4.4/reduce-cached-ticket-role-group-members, updated. rt-4.4.4-15-gb6b5e65bd

? sunnavy sunnavy at bestpractical.com
Fri May 24 13:38:12 EDT 2019


The branch, 4.4/reduce-cached-ticket-role-group-members has been updated
       via  b6b5e65bd680742fa1b0b99f8f8ec92645c85d9e (commit)
       via  92d8f94ba7298f8bd73a1d0b27bc7d18e79a5d92 (commit)
      from  323c064975c440763b680725e4d8304416294c38 (commit)

Summary of changes:
 lib/RT/Group.pm             | 14 +++++++++++++-
 t/shredder/02group_member.t | 22 +++++++++++++++++++++-
 2 files changed, 34 insertions(+), 2 deletions(-)

- Log -----------------------------------------------------------------
commit 92d8f94ba7298f8bd73a1d0b27bc7d18e79a5d92
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Sat May 25 01:03:14 2019 +0800

    Don't shred subgroups' member relationships when shredding ticket role groups
    
    In 89c2d94f, we updated DeepMembersObj to return all members recursively
    for ticket role groups.  As ticket role groups are not directly
    connected to subgroups' members any more(see 9444ce14), we had to expand
    the search to cover subgroups' member relationships there.
    
    But to shred ticket role groups, we only want to shred their own direct
    relationships, instead of subgroups' ones. e.g. ticket 1's AdminCc role
    group has 2 direct members: user "alice" and group "managers", while
    group "managers" has user members "bob" and "richard". When we shred
    ticket 1, the AdminCc role group will be shredded, the following
    relationships need to be shredded too:
    
    * AdminCc role group <-> user "alice"
    * AdminCc role group <-> group "managers"
    
    But definitely not:
    
    * group "managers" <-> user "bob"
    * group "managers" <-> user "richard"

diff --git a/lib/RT/Group.pm b/lib/RT/Group.pm
index bb0049708..0e4cb973d 100644
--- a/lib/RT/Group.pm
+++ b/lib/RT/Group.pm
@@ -1589,7 +1589,19 @@ sub __DependsOn {
     push( @$list, $objs );
 
 # Cached group members records
-    push( @$list, $self->DeepMembersObj );
+
+    if ( ( $self->Domain // '' ) eq 'RT::Ticket-Role' ) {
+
+        # For ticket role groups, do not delete subgroups' member
+        # relationships, as they are irrelevant here.
+
+        my $members_obj = RT::CachedGroupMembers->new( $self->CurrentUser );
+        $members_obj->LimitToMembersOfGroup( $self->PrincipalId );
+        push( @$list, $members_obj );
+    }
+    else {
+        push( @$list, $self->DeepMembersObj );
+    }
 
 # Cached group member records group belongs to
     $objs = RT::GroupMembers->new( $self->CurrentUser );

commit b6b5e65bd680742fa1b0b99f8f8ec92645c85d9e
Author: sunnavy <sunnavy at bestpractical.com>
Date:   Sat May 25 01:26:12 2019 +0800

    Add tests to shred a ticket with groups in AdminCc

diff --git a/t/shredder/02group_member.t b/t/shredder/02group_member.t
index 692d361d3..9b9381de9 100644
--- a/t/shredder/02group_member.t
+++ b/t/shredder/02group_member.t
@@ -3,7 +3,7 @@ use strict;
 use warnings;
 
 use Test::Deep;
-use RT::Test::Shredder tests => 35;
+use RT::Test::Shredder tests => undef;
 my $test = "RT::Test::Shredder";
 
 ### nested membership check
@@ -146,3 +146,23 @@ my $test = "RT::Test::Shredder";
         is( $ticket->Owner, RT->Nobody->id, "owner switched back to nobody" );
         is( $ticket->OwnerGroup->MembersObj->First->MemberId, RT->Nobody->id, "and owner role group member is nobody");
 }
+
+diag "Shred a ticket with groups in AdminCc role group";
+{
+        $test->restore_savepoint('clean');
+
+        my $user = RT::Test->load_or_create_user( Name => 'alice' );
+        my $group = RT::Test->load_or_create_group( 'managers' );
+        my ( $status, $msg ) = $group->AddMember( $user->id );
+        ok( $status, "added user to group" ) or diag "error: $msg";
+
+        my $ticket = RT::Test->create_ticket( Queue => 'General', Subject => 'group requestor', AdminCc => $group->id );
+        $ticket->ApplyTransactionBatch;
+
+        my $shredder = $test->shredder_new();
+        $shredder->PutObjects( Objects => $ticket );
+        $shredder->WipeoutAll();
+        $test->db_is_valid;
+}
+
+done_testing;

-----------------------------------------------------------------------


More information about the rt-commit mailing list