public function execute($bus) { $config = new Acl_Config(); $configs = $config->configure(); $request = $bus->get("request"); $response = $bus->get("response"); $this->user = $user = new Acl_User($bus->get("session")); if (isset($user->login_uri) && $user->login_uri !== $request->getUri()) { $user->remove("login_uri"); $user->remove("back_uri"); } $controller = $bus->get("controller"); $controller->setAttribute("aclUser", $user); if ($response->isFailure() || $response->isRedirected()) { return; } $destination = $bus->get("destination"); list($modName, $ctrlName, $actName) = $destination->toArray(); if (!isset($configs[$modName])) { return; } $modConfig = $configs[$modName]; $ctrlConfig = $modConfig->getController($ctrlName); if ($ctrlConfig === null) { if ($this->isAllow($modConfig)) { return; } $authUri = $modConfig->authUri(); } else { if ($this->isAllow($ctrlConfig)) { return; } $authUri = $ctrlConfig->authUri(); if ($authUri === null) { $authUri = $modConfig->authUri(); } } l("ACL: access denied.", SBL_LOG_DEBUG); if ($controller->hasMethod("aclForbidden")) { $result = $controller->aclForbidden($actName); if ($result === false) { return; } if ($result !== null) { $user->back_uri = $result; } } if ($authUri === null) { $response->getStatus()->setCode(Sabel_Response::FORBIDDEN); } else { $user->login_uri = ltrim($response->getRedirector()->to($authUri), "/"); } }
public function test_init() { // check instance type $this->assertInstanceOf('Acl_Config', $this->acl_config); // check singleton $this->assertSame(Acl_Config::instance(), $this->acl_config); }
/** * Method to add ignored controllers from outside the class * @param mixed (string/array) */ public static function ignore_controllers($ignore) { if (is_array($ignore)) { self::$ignoredControllers = array_merge(self::$ignoredControllers, $ignore); } else { if (is_string($ignore)) { self::$ignoredControllers[] = $ignore; } } }
/** * convert the permissions array stored in the database (unserialized) into * a config array with resource > level depth * @return Array $arr */ public static function acl_array($permissions) { $config_acl = Acl_Config::instance()->acl(); $arr = array(); foreach ($config_acl as $resource => $levels) { $arr[$resource] = array(); foreach ($levels as $level) { $key = self::repr_key($resource, $level); $arr[$resource][$level] = array_key_exists($key, $permissions); } } return $arr; }