protected function processForm() { foreach ($this->request->acl as $key => $value) { // If key has an underscore, then we are creating a new permission if (1 == preg_match('/([\\w]+)_(.*)/', $key, $matches)) { list($action, $uri) = array_slice($matches, 1, 2); $params = $this->context->routing->parse(Qubit::pathInfo($uri)); if (isset($params['_sf_route']->resource)) { $resource = $params['_sf_route']->resource; } else { continue; } if (QubitAcl::INHERIT != $value && isset($this->basicActions[$action])) { $aclPermission = new QubitAclPermission(); $aclPermission->action = $action; $aclPermission->grantDeny = QubitAcl::GRANT == $value ? 1 : 0; switch ($resource->className) { case 'QubitRepository': $aclPermission->objectId = QubitInformationObject::ROOT_ID; $aclPermission->setRepository($resource); break; case 'QubitTaxonomy': $aclPermission->objectId = QubitTerm::ROOT_ID; $aclPermission->setTaxonomy($resource); break; default: $aclPermission->object = $resource; } $this->resource->aclPermissions[] = $aclPermission; } } else { if (null !== ($aclPermission = QubitAclPermission::getById($key))) { if (QubitAcl::INHERIT == $value) { $aclPermission->delete(); } else { $aclPermission->grantDeny = QubitAcl::GRANT == $value ? 1 : 0; $this->resource->aclPermissions[] = $aclPermission; } } } } $this->resource->save(); }