]> git.ipfire.org Git - thirdparty/bugzilla.git/commitdiff
Bug 683025 - Add a check_for_edit to Bugzilla::Bug to return the bug object
authorRobert Webb <rowebb@gmail.com>
Thu, 1 Sep 2011 20:24:27 +0000 (13:24 -0700)
committerMax Kanat-Alexander <mkanat@bugzilla.org>
Thu, 1 Sep 2011 20:24:27 +0000 (13:24 -0700)
if the user can edit the bug
r=mkanat, a=mkanat

Bugzilla/Bug.pm
Bugzilla/BugUrl/Bugzilla/Local.pm
Bugzilla/WebService/Bug.pm
process_bug.cgi

index 7745a98095d4f5c3d6b4be9d759e145ac8e5881f..23e07979f488eb4d6a15be44ab9a6ced23ca1f2b 100644 (file)
@@ -403,6 +403,16 @@ sub check {
     return $self;
 }
 
+sub check_for_edit {
+    my $class = shift;
+    my $bug = $class->check(@_);
+
+    Bugzilla->user->can_edit_product($bug->product_id)
+        || ThrowUserError("product_edit_denied", { product => $bug->product });
+
+    return $bug;
+}
+
 sub check_is_visible {
     my $self = shift;
     my $user = Bugzilla->user;
index 233acbe6696a7a2c59268a32d382098491cfd81d..c052d7d3bedb0cd6f0ae77b716d2792cda7d17d6 100644 (file)
@@ -119,7 +119,7 @@ sub _check_value {
     }
 
     my $ref_bug_id  = $uri->query_param('id');
-    my $ref_bug     = Bugzilla::Bug->check($ref_bug_id);
+    my $ref_bug     = Bugzilla::Bug->check_for_edit($ref_bug_id);
     my $self_bug_id = $params->{bug_id};
     $params->{ref_bug} = $ref_bug;
 
@@ -127,12 +127,6 @@ sub _check_value {
         ThrowUserError('see_also_self_reference');
     }
  
-    my $product = $ref_bug->product_obj;
-    if (!Bugzilla->user->can_edit_product($product->id)) {
-        ThrowUserError("product_edit_denied",
-                       { product => $product->name });
-    }
-
     return $uri;
 }
 
index 7844b4e97636ebee0eb1f0b21e3b492b28e1e8b7..63d04bb0bc08755edb4ed46795f82b4554016481 100644 (file)
@@ -481,7 +481,7 @@ sub update {
     my $ids = delete $params->{ids};
     defined $ids || ThrowCodeError('param_required', { param => 'ids' });
 
-    my @bugs = map { Bugzilla::Bug->check($_) } @$ids;
+    my @bugs = map { Bugzilla::Bug->check_for_edit($_) } @$ids;
 
     my %values = %$params;
     $values{other_bugs} = \@bugs;
@@ -497,11 +497,6 @@ sub update {
     delete $values{flags};
 
     foreach my $bug (@bugs) {
-        if (!$user->can_edit_product($bug->product_obj->id) ) {
-            ThrowUserError("product_edit_denied",
-                          { product => $bug->product });
-        }
-
         $bug->set_all(\%values);
     }
 
@@ -632,11 +627,7 @@ sub add_attachment {
     defined $params->{data}
         || ThrowCodeError('param_required', { param => 'data' });
 
-    my @bugs = map { Bugzilla::Bug->check($_) } @{ $params->{ids} };
-    foreach my $bug (@bugs) {
-        Bugzilla->user->can_edit_product($bug->product_id)
-          || ThrowUserError("product_edit_denied", {product => $bug->product});
-    }
+    my @bugs = map { Bugzilla::Bug->check_for_edit($_) } @{ $params->{ids} };
 
     my @created;
     $dbh->bz_start_transaction();
@@ -681,11 +672,8 @@ sub add_comment {
     (defined $comment && trim($comment) ne '')
         || ThrowCodeError('param_required', { param => 'comment' });
     
-    my $bug = Bugzilla::Bug->check($params->{id});
+    my $bug = Bugzilla::Bug->check_for_edit($params->{id});
 
-    $user->can_edit_product($bug->product_id)
-        || ThrowUserError("product_edit_denied", {product => $bug->product});
-    
     # Backwards-compatibility for versions before 3.6    
     if (defined $params->{private}) {
         $params->{is_private} = delete $params->{private};
@@ -726,10 +714,7 @@ sub update_see_also {
 
     my @bugs;
     foreach my $id (@{ $params->{ids} }) {
-        my $bug = Bugzilla::Bug->check($id);
-        $user->can_edit_product($bug->product_id)
-            || ThrowUserError("product_edit_denied", 
-                              { product => $bug->product });
+        my $bug = Bugzilla::Bug->check_for_edit($id);
         push(@bugs, $bug);
         if ($remove) {
             $bug->remove_see_also($_) foreach @$remove;
index 9ba03e27741fca44b2c9ec3e4ea39b67b68abd3e..dc5ad9138ddc9dc7e0258d24ad5e48d40088c92f 100755 (executable)
@@ -96,14 +96,14 @@ sub should_set {
 # Create a list of objects for all bugs being modified in this request.
 my @bug_objects;
 if (defined $cgi->param('id')) {
-  my $bug = Bugzilla::Bug->check(scalar $cgi->param('id'));
+  my $bug = Bugzilla::Bug->check_for_edit(scalar $cgi->param('id'));
   $cgi->param('id', $bug->id);
   push(@bug_objects, $bug);
 } else {
     foreach my $i ($cgi->param()) {
         if ($i =~ /^id_([1-9][0-9]*)/) {
             my $id = $1;
-            push(@bug_objects, Bugzilla::Bug->check($id));
+            push(@bug_objects, Bugzilla::Bug->check_for_edit($id));
         }
     }
 }
@@ -213,15 +213,6 @@ else {
     $action = 'nothing';
 }
 
-# For each bug, we have to check if the user can edit the bug the product
-# is currently in, before we allow them to change anything.
-foreach my $bug (@bug_objects) {
-    if (!$user->can_edit_product($bug->product_obj->id)) {
-        ThrowUserError("product_edit_denied",
-                      { product => $bug->product });
-    }
-}
-
 # Component, target_milestone, and version are in here just in case
 # the 'product' field wasn't defined in the CGI. It doesn't hurt to set
 # them twice.