X-Git-Url: http://git.freeside.biz/gitweb/?p=freeside.git;a=blobdiff_plain;f=rt%2Flib%2FRT%2FGroupMember_Overlay.pm;h=d824dc4b35f9eb93b04f4a0ed9cd3f385ee01992;hp=5ff7b3e7fac996ea4cc5b3ecb2fae73b8422b65a;hb=9c68254528b6f2c7d8c1921b452fa56064783782;hpb=d39d52aac8f38ea9115628039f0df5aa3ac826de diff --git a/rt/lib/RT/GroupMember_Overlay.pm b/rt/lib/RT/GroupMember_Overlay.pm index 5ff7b3e7f..d824dc4b3 100644 --- a/rt/lib/RT/GroupMember_Overlay.pm +++ b/rt/lib/RT/GroupMember_Overlay.pm @@ -1,8 +1,8 @@ -# {{{ BEGIN BPS TAGGED BLOCK +# BEGIN BPS TAGGED BLOCK {{{ # # COPYRIGHT: # -# This software is Copyright (c) 1996-2004 Best Practical Solutions, LLC +# This software is Copyright (c) 1996-2005 Best Practical Solutions, LLC # # # (Except where explicitly superseded by other copyright notices) @@ -42,7 +42,8 @@ # works based on those contributions, and sublicense and distribute # those contributions and any derivatives thereof. # -# }}} END BPS TAGGED BLOCK +# END BPS TAGGED BLOCK }}} + =head1 NAME RT::GroupMember - a member of an RT Group @@ -72,6 +73,9 @@ ok (require RT::GroupMember); =cut + +package RT::GroupMember; + use strict; no warnings qw(redefine); use RT::CachedGroupMembers; @@ -120,7 +124,7 @@ sub Create { #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. # TODO what about the groups key cache? - RT::Principal->_InvalidateACLCache(); + RT::Principal->InvalidateACLCache(); $RT::Handle->BeginTransaction() unless ($args{'InsideTransaction'}); @@ -229,7 +233,7 @@ sub _StashUser { #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. # TODO what about the groups key cache? - RT::Principal->_InvalidateACLCache(); + RT::Principal->InvalidateACLCache(); # We really need to make sure we don't add any members to this group @@ -303,9 +307,6 @@ sub Delete { VALUE => $self->GroupObj->Id ); - #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. - # TODO what about the groups key cache? - RT::Principal->_InvalidateACLCache(); @@ -319,12 +320,27 @@ sub Delete { } } - my $err = $self->SUPER::Delete(); + my ($err, $msg) = $self->SUPER::Delete(); unless ($err) { $RT::Logger->warning("Couldn't delete cached group submember ".$self->Id); $RT::Handle->Rollback(); return (undef); } + + # Since this deletion may have changed the former member's + # delegation rights, we need to ensure that no invalid delegations + # remain. + $err = $self->MemberObj->_CleanupInvalidDelegations(InsideTransaction => 1); + unless ($err) { + $RT::Logger->warning("Unable to revoke delegated rights for principal ".$self->Id); + $RT::Handle->Rollback(); + return (undef); + } + + #Clear the key cache. TODO someday we may want to just clear a little bit of the keycache space. + # TODO what about the groups key cache? + RT::Principal->InvalidateACLCache(); + $RT::Handle->Commit(); return ($err);