Author: david
Date: Thu Oct 21 17:10:30 2010
New Revision: 8354

Log:
Filter by drafts by repository. Fixes issue #1821.

Modified:
   trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php

Modified: trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php
==============================================================================
--- trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php    Thu Oct 21 17:09:37 
2010        (r8353)
+++ trunk/plugins/qbAclPlugin/lib/QubitAcl.class.php    Thu Oct 21 17:10:30 
2010        (r8354)
@@ -75,7 +75,7 @@
   }
 
   /**
-   * Test user access to the given access control object (aco).
+   * Test user access to the given resource 
    *
    * Note: Current sf_user is assumed, but can be overridden with
    * $options['userId'].
@@ -834,20 +834,50 @@
 
     // Build access control list
     $allows = $bans = array();
+    $forceBan = false;
     if (0 < count($permissions))
     {
       foreach ($permissions as $permission)
       {
-        $id = $permission->objectId;
-
-        if ('createTerm' == $action)
+        switch ($action)
         {
-          if (null === $id = $permission->getConstants(array('name' => 
'taxonomyId')))
-          {
-            $id = QubitTaxonomy::ROOT_ID;
-          }
+          case 'createTerm':
+            if (null === $id = $permission->getConstants(array('name' => 
'taxonomyId')))
+            {
+              $ids[] = QubitTaxonomy::ROOT_ID;
+            }
+
+            break;
+
+          case 'viewDraft':
+            if (null !== $repoId = $permission->getConstants(array('name' => 
'repositoryId')))
+            {
+              $criteria2 = new Criteria;
+              $criteria2->add(QubitInformationObject::REPOSITORY_ID, $repoId);
+
+              if (0 < count($results = 
QubitInformationObject::get($criteria2)))
+              {
+                foreach ($results as $item)
+                {
+                  $ids[] = $item->id;
+                }
+
+                // Special case because isAllowed() on ROOT will return true if
+                // user has grant permission on ANY taxonomy.  We want to force
+                // showing ONLY resources in allowed repositories
+                $forceBan = true;
+              }
+            }
+
+            break;
+
+          default:
+            $ids[] = $permission->objectId;
         }
+      }
 
+      foreach ($ids as $id)
+      {
         if (!isset($resourceAccess[$id]))
         {
           $resource = call_user_func(array($rootClass, 'getById'), $id);
@@ -861,7 +891,6 @@
           {
             $bans[] = $id;
           }
-
         }
       }
     }
@@ -871,7 +900,7 @@
     {
       return false; // No allows, always false
     }
-    else if (0 == count($bans) && QubitAcl::isAllowed($user, $root, $action))
+    else if (!$forceBan && 0 == count($bans) && QubitAcl::isAllowed($user, 
$root, $action))
     {
       return true; // No bans, always true
     }

-- 
You received this message because you are subscribed to the Google Groups 
"Qubit Toolkit Commits" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/qubit-commits?hl=en.

Reply via email to