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
-~----------~----~----~----~------~----~------~--~---