Changeset 2099
- Timestamp:
- 04/25/08 03:52:07 (3 months ago)
- Files:
-
- branches/release-36/lib/MT/Author.pm (modified) (1 diff)
- branches/release-36/lib/MT/Permission.pm (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
branches/release-36/lib/MT/Author.pm
r2087 r2099 363 363 } 364 364 ($perm, my $sys_perm) = @perm; 365 $perm->add_permission ($sys_perm);365 $perm->add_permissions($sys_perm); 366 366 } elsif (@perm == 1) { 367 367 $perm = $perm[0]; 368 368 if (!$perm->blog_id) { 369 369 $perm->blog_id($obj->id); 370 delete $perm->{column_values} ->{id};371 delete $perm->{changed_cols} ->{id};370 delete $perm->{column_values}{blog_id}; 371 delete $perm->{changed_cols}{blog_id}; 372 372 } 373 } elsif (@perm) { 374 die "invalid permissions for author " . $author->id; 373 } elsif (@perm > 2) { 374 # Condition sometimes caused by saving preferences. BugId:79501 375 # Handle by merging permissions and removing all but one 376 # Not ideal, but better than dying... 377 my ($sys_perm) = grep { ! $_->blog_id } @perm; 378 my @blog_perms = grep { $_->blog_id } sort { $b->modified_on cmp $a->modified_on } @perm; 379 380 my $new_perm = shift @blog_perms; # take last one saved 381 if (@blog_perms) { 382 foreach my $more_perms (@blog_perms) { 383 $new_perm->add_permissions($more_perms); 384 $new_perm->add_restrictions($more_perms); 385 $more_perms->remove; 386 } 387 # save merged permission record 388 $new_perm->save; 389 } 390 $new_perm->add_permissions($sys_perm); 391 $new_perm->add_restrictions($sys_perm); 392 $perm = $new_perm; 393 @perm = ($perm); 375 394 } 376 395 } else { branches/release-36/lib/MT/Permission.pm
r1823 r2099 138 138 } 139 139 140 sub add_restrictions { 141 my $perms = shift; 142 my ($more_perm) = @_; 143 if ( my $more = $more_perm->restrictions ) { 144 if ( $more =~ /'administer_blog'/ ) { 145 $more = _all_perms('blog'); 146 } 147 my $cur_perm = $perms->restrictions; 148 my @newperms; 149 for my $p ( split ',', $more ) { 150 $p =~ s/'(.+)'/$1/; 151 next if $perms->has($p); 152 push @newperms, $p; 153 } 154 return unless @newperms; 155 my $newperm = "'" . join( "','", @newperms ) . "'"; 156 $newperm = "$cur_perm,$newperm" if $cur_perm; 157 $perms->restrictions($newperm); 158 } 159 } 160 140 161 # Sets permissions of those in a particular set 141 162 sub set_full_permissions {
