Author: jablko
Date: Fri Oct  2 13:22:48 2009
New Revision: 3645

Log:
Move install security check from filter to event listener because I can't 
figure out how to configure sf_security_filter per module, and although plugins 
may include filter.yml, they must list all filters configured in symfony and 
app filter.yml, which is impractical for a plugin : P -- force

Deleted:
   trunk/plugins/sfInstallPlugin/lib/sfInstallSecurityFilter.class.php
Modified:
   trunk/lib/vendor/symfony/lib/event/sfEvent.class.php
   trunk/plugins/sfInstallPlugin/config/sfInstallPluginConfiguration.class.php

Modified: trunk/lib/vendor/symfony/lib/event/sfEvent.class.php
==============================================================================
--- trunk/lib/vendor/symfony/lib/event/sfEvent.class.php        Fri Oct  2 
13:16:47 2009        (r3644)
+++ trunk/lib/vendor/symfony/lib/event/sfEvent.class.php        Fri Oct  2 
13:22:48 2009        (r3645)
@@ -129,7 +129,7 @@
    *
    * @return mixed The parameter value
    */
-  public function offsetGet($name)
+  public function __get($name)
   {
     if (!array_key_exists($name, $this->parameters))
     {
@@ -139,6 +139,13 @@
     return $this->parameters[$name];
   }
 
+  public function offsetGet($offset)
+  {
+    $args = func_get_args();
+
+    return call_user_func_array(array($this, '__get'), $args);
+  }
+
   /**
    * Sets a parameter (implements the ArrayAccess interface).
    *

Modified: 
trunk/plugins/sfInstallPlugin/config/sfInstallPluginConfiguration.class.php
==============================================================================
--- trunk/plugins/sfInstallPlugin/config/sfInstallPluginConfiguration.class.php 
Fri Oct  2 13:16:47 2009        (r3644)
+++ trunk/plugins/sfInstallPlugin/config/sfInstallPluginConfiguration.class.php 
Fri Oct  2 13:22:48 2009        (r3645)
@@ -23,6 +23,46 @@
     }
   }
 
+  public function controllerChangeAction(sfEvent $event)
+  {
+    if ('sfInstallPlugin' != $event->module)
+    {
+      return;
+    }
+
+    $credential = 
$event->getSubject()->getActionStack()->getLastEntry()->getActionInstance()->getCredential();
+
+    try
+    {
+      new sfDatabaseManager($this->configuration);
+    }
+    catch (sfConfigurationException $e)
+    {
+      sfContext::getInstance()->user->addCredential($credential);
+
+      return;
+    }
+
+    if (sfContext::getInstance()->user->hasCredential($credential))
+    {
+      return;
+    }
+
+    $criteria = new Criteria;
+    $criteria->add(QubitAclGroupI18n::NAME, $credential);
+    $criteria->addJoin(QubitAclGroupI18n::ID, QubitAclGroup::ID);
+    $criteria->addJoin(QubitAclGroup::ID, QubitAclUserGroup::GROUP_ID);
+    $criteria->addJoin(QubitAclUserGroup::USER_ID, QubitUser::ID);
+    if (1 > count(QubitUser::get($criteria)))
+    {
+      return;
+    }
+
+    $event->getSubject()->forward(sfConfig::get('sf_secure_module'), 
sfConfig::get('sf_secure_action'));
+
+    throw new sfStopException;
+  }
+
   public function routingLoadConfiguration(sfEvent $event)
   {
     $routing = $event->getSubject();
@@ -92,6 +132,8 @@
     $enabledModules[] = 'sfInstallPlugin';
     sfConfig::set('sf_enabled_modules', $enabledModules);
 
+    $this->dispatcher->connect('controller.change_action', array($this, 
'controllerChangeAction'));
+
     // Connect event listener to add routes
     $this->dispatcher->connect('routing.load_configuration', array($this, 
'routingLoadConfiguration'));
   }

--~--~---------~--~----~------------~-------~--~----~
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.ca/group/qubit-commits?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to