From 166132ca1059288e5a411155395580774528a828 Mon Sep 17 00:00:00 2001 From: phpnut Date: Tue, 1 May 2007 01:49:51 +0000 Subject: [PATCH] Moving all acl related models to model/db_acl.php. Removing components/models directories Changing the ACL_FILENAME setting in core.php git-svn-id: https://svn.cakephp.org/repo/branches/1.2.x.x@4960 3807eeeb-6ff5-0310-8944-8be069107fe0 --- app/config/core.php | 2 +- cake/libs/controller/components/acl.php | 4 +- .../components/dbacl/models/aclnode.php | 136 ----------- .../components/dbacl/models/aco.php | 55 ----- .../components/dbacl/models/acoaction.php | 54 ---- .../components/dbacl/models/aro.php | 56 ----- .../components/dbacl/models/permission.php | 74 ------ cake/libs/model/db_acl.php | 231 +++++++++++++++++- cake/libs/model/ini_acl.php | 9 - 9 files changed, 222 insertions(+), 399 deletions(-) delete mode 100644 cake/libs/controller/components/dbacl/models/aclnode.php delete mode 100644 cake/libs/controller/components/dbacl/models/aco.php delete mode 100644 cake/libs/controller/components/dbacl/models/acoaction.php delete mode 100644 cake/libs/controller/components/dbacl/models/aro.php delete mode 100644 cake/libs/controller/components/dbacl/models/permission.php diff --git a/app/config/core.php b/app/config/core.php index c08618d7f..4a8a0edc4 100644 --- a/app/config/core.php +++ b/app/config/core.php @@ -151,7 +151,7 @@ * access control lists. */ define('ACL_CLASSNAME', 'DB_ACL'); - define('ACL_FILENAME', 'dbacl' . DS . 'db_acl'); + define('ACL_FILENAME', 'db_acl'); define('ACL_DATABASE', 'default'); /** * How long to cache data if not defined diff --git a/cake/libs/controller/components/acl.php b/cake/libs/controller/components/acl.php index 20557a007..d7b60e9a9 100644 --- a/cake/libs/controller/components/acl.php +++ b/cake/libs/controller/components/acl.php @@ -51,7 +51,9 @@ class AclComponent extends Object { */ function &getACL() { if($this->_instance == null) { - uses('model' . DS . ACL_FILENAME); + $file = explode(DS, ACL_FILENAME); + $file = array_pop($file); + uses('model' . DS . $file); $classname = ACL_CLASSNAME; $this->_instance = new $classname; } diff --git a/cake/libs/controller/components/dbacl/models/aclnode.php b/cake/libs/controller/components/dbacl/models/aclnode.php deleted file mode 100644 index 387290569..000000000 --- a/cake/libs/controller/components/dbacl/models/aclnode.php +++ /dev/null @@ -1,136 +0,0 @@ - - * Copyright 2005-2007, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2007, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision$ - * @modifiedby $LastChangedBy$ - * @lastmodified $Date$ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * - */ -loadModel(); - -class AclNode extends AppModel { - - var $useDbConfig = ACL_DATABASE; -/** - * Explicitly disable in-memory query caching for ACL models - * - * @var boolean - */ - var $cacheQueries = false; -/** - * ACL models use the Tree behavior - * - * @var mixed - */ - var $actsAs = array('Tree' => 'nested'); -/** - * Retrieves the Aro/Aco node for this model - * - * @param mixed $ref - * @return array - */ - function node($ref = null) { - $db =& ConnectionManager::getDataSource($this->useDbConfig); - $type = $this->name; - $prefix = $this->tablePrefix; - - if (!empty($this->useTable)) { - $table = $this->useTable; - } else { - $table = Inflector::pluralize(Inflector::underscore($type)); - } - - if (empty($ref)) { - return null; - } elseif (is_string($ref)) { - $path = explode('/', $ref); - $start = $path[count($path) - 1]; - unset($path[count($path) - 1]); - - $query = "SELECT {$type}.* From {$prefix}{$table} AS {$type} "; - $query .= "LEFT JOIN {$prefix}{$table} AS {$type}0 "; - $query .= "ON {$type}0.alias = " . $db->value($start) . " "; - foreach ($path as $i => $alias) { - $j = $i - 1; - $k = $i + 1; - $query .= "LEFT JOIN {$prefix}{$table} AS {$type}{$k} "; - $query .= "ON {$type}{$k}.lft > {$type}{$i}.lft && {$type}{$k}.rght < {$type}{$i}.rght "; - $query .= "AND {$type}{$k}.alias = " . $db->value($alias) . " "; - } - $result = $this->query("{$query} WHERE {$type}.lft <= {$type}0.lft AND {$type}.rght >= {$type}0.rght ORDER BY {$type}.lft DESC", $this->cacheQueries); - } elseif (is_object($ref) && is_a($ref, 'Model')) { - $ref = array('model' => $ref->name, 'foreign_key' => $ref->id); - } elseif (is_array($ref) && !(isset($ref['model']) && isset($ref['foreign_key']))) { - $name = key($ref); - if (!ClassRegistry::isKeySet($name)) { - if (!loadModel($name)) { - trigger_error("Model class '$name' not found in AclNode::node() when trying to bind {$this->name} object", E_USER_WARNING); - return null; - } - $model =& new $name(); - } else { - $model =& ClassRegistry::getObject($name); - } - $tmpRef = null; - if (method_exists($model, 'bindNode')) { - $tmpRef = $model->bindNode($ref); - } - if (empty($tmpRef)) { - $ref = array('model' => $name, 'foreign_key' => $ref[$name][$model->primaryKey]); - } else { - if (is_string($tmpRef)) { - return $this->node($tmpRef); - } - $ref = $tmpRef; - } - } - if (is_array($ref)) { - foreach ($ref as $key => $val) { - if (strpos($key, $type) !== 0) { - unset($ref[$key]); - $ref["{$type}0.{$key}"] = $val; - } - } - $query = "SELECT {$type}.* From {$prefix}{$table} AS {$type} "; - $query .= "LEFT JOIN {$prefix}{$table} AS {$type}0 "; - $query .= "ON {$type}.lft <= {$type}0.lft AND {$type}.rght >= {$type}0.rght "; - $result = $this->query("{$query} " . $db->conditions($ref) ." ORDER BY {$type}.lft DESC", $this->cacheQueries); - - if (!$result) { - trigger_error("AclNode::node() - Couldn't find {$type} node identified by \"" . print_r($ref, true) . "\"", E_USER_WARNING); - } - } - return $result; - } -} - -?> \ No newline at end of file diff --git a/cake/libs/controller/components/dbacl/models/aco.php b/cake/libs/controller/components/dbacl/models/aco.php deleted file mode 100644 index 8ded2ebd5..000000000 --- a/cake/libs/controller/components/dbacl/models/aco.php +++ /dev/null @@ -1,55 +0,0 @@ - - * Copyright 2005-2007, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2007, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision$ - * @modifiedby $LastChangedBy$ - * @lastmodified $Date$ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * - */ -class Aco extends AclNode { -/** - * Model name - * - * @var string - */ - var $name = 'Aco'; -/** - * Binds to ARO nodes through permissions settings - * - * @var array - */ - var $hasAndBelongsToMany = array('Aro' => array('with' => 'Permission')); -} - -?> \ No newline at end of file diff --git a/cake/libs/controller/components/dbacl/models/acoaction.php b/cake/libs/controller/components/dbacl/models/acoaction.php deleted file mode 100644 index dbb9c63f2..000000000 --- a/cake/libs/controller/components/dbacl/models/acoaction.php +++ /dev/null @@ -1,54 +0,0 @@ - - * Copyright 2005-2007, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2007, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision$ - * @modifiedby $LastChangedBy$ - * @lastmodified $Date$ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Short description. - */ -if (!class_exists('AppModel')) { - require (CAKE . 'app_model.php'); -} -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * - */ -class AcoAction extends AppModel { -/** - * Enter description here... - * - * @var unknown_type - */ - var $belongsTo = 'Aco'; -} -?> \ No newline at end of file diff --git a/cake/libs/controller/components/dbacl/models/aro.php b/cake/libs/controller/components/dbacl/models/aro.php deleted file mode 100644 index 7cea8d64f..000000000 --- a/cake/libs/controller/components/dbacl/models/aro.php +++ /dev/null @@ -1,56 +0,0 @@ - - * Copyright 2005-2007, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2007, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision$ - * @modifiedby $LastChangedBy$ - * @lastmodified $Date$ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * - */ -class Aro extends AclNode { - -/** - * Enter description here... - * - * @var unknown_type - */ - var $name = 'Aro'; -/** - * Enter description here... - * - * @var unknown_type - */ - var $hasAndBelongsToMany = array('Aco' => array('with' => 'Permission')); -} - -?> \ No newline at end of file diff --git a/cake/libs/controller/components/dbacl/models/permission.php b/cake/libs/controller/components/dbacl/models/permission.php deleted file mode 100644 index b47c877ba..000000000 --- a/cake/libs/controller/components/dbacl/models/permission.php +++ /dev/null @@ -1,74 +0,0 @@ - - * Copyright 2005-2007, Cake Software Foundation, Inc. - * 1785 E. Sahara Avenue, Suite 490-204 - * Las Vegas, Nevada 89104 - * - * Licensed under The MIT License - * Redistributions of files must retain the above copyright notice. - * - * @filesource - * @copyright Copyright 2005-2007, Cake Software Foundation, Inc. - * @link http://www.cakefoundation.org/projects/info/cakephp CakePHP(tm) Project - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - * @since CakePHP(tm) v 0.10.0.1232 - * @version $Revision$ - * @modifiedby $LastChangedBy$ - * @lastmodified $Date$ - * @license http://www.opensource.org/licenses/mit-license.php The MIT License - */ - -/** - * Short description for file. - * - * Long description for file - * - * @package cake - * @subpackage cake.cake.libs.controller.components.dbacl.models - */ - -class Permission extends AppModel { - - var $useDbConfig = ACL_DATABASE; -/** - * Enter description here... - * - * @var unknown_type - */ - var $cacheQueries = false; -/** - * Enter description here... - * - * @var unknown_type - */ - var $name = 'Permission'; -/** - * Enter description here... - * - * @var unknown_type - */ - var $useTable = 'aros_acos'; -/** - * Enter description here... - * - * @var unknown_type - */ - var $belongsTo = 'Aro,Aco'; -/** - * Enter description here... - * - * @var unknown_type - */ - var $actsAs = null; -} -?> \ No newline at end of file diff --git a/cake/libs/model/db_acl.php b/cake/libs/model/db_acl.php index 076897ffa..110c88317 100644 --- a/cake/libs/model/db_acl.php +++ b/cake/libs/model/db_acl.php @@ -1,6 +1,5 @@ 'nested'); +/** + * Retrieves the Aro/Aco node for this model + * + * @param mixed $ref + * @return array + */ + function node($ref = null) { + $db =& ConnectionManager::getDataSource($this->useDbConfig); + $type = $this->name; + $prefix = $this->tablePrefix; + + if (!empty($this->useTable)) { + $table = $this->useTable; + } else { + $table = Inflector::pluralize(Inflector::underscore($type)); + } + + if (empty($ref)) { + return null; + } elseif (is_string($ref)) { + $path = explode('/', $ref); + $start = $path[count($path) - 1]; + unset($path[count($path) - 1]); + + $query = "SELECT {$type}.* From {$prefix}{$table} AS {$type} "; + $query .= "LEFT JOIN {$prefix}{$table} AS {$type}0 "; + $query .= "ON {$type}0.alias = " . $db->value($start) . " "; + foreach ($path as $i => $alias) { + $j = $i - 1; + $k = $i + 1; + $query .= "LEFT JOIN {$prefix}{$table} AS {$type}{$k} "; + $query .= "ON {$type}{$k}.lft > {$type}{$i}.lft && {$type}{$k}.rght < {$type}{$i}.rght "; + $query .= "AND {$type}{$k}.alias = " . $db->value($alias) . " "; + } + $result = $this->query("{$query} WHERE {$type}.lft <= {$type}0.lft AND {$type}.rght >= {$type}0.rght ORDER BY {$type}.lft DESC", $this->cacheQueries); + } elseif (is_object($ref) && is_a($ref, 'Model')) { + $ref = array('model' => $ref->name, 'foreign_key' => $ref->id); + } elseif (is_array($ref) && !(isset($ref['model']) && isset($ref['foreign_key']))) { + $name = key($ref); + if (!ClassRegistry::isKeySet($name)) { + if (!loadModel($name)) { + trigger_error("Model class '$name' not found in AclNode::node() when trying to bind {$this->name} object", E_USER_WARNING); + return null; + } + $model =& new $name(); + } else { + $model =& ClassRegistry::getObject($name); + } + $tmpRef = null; + if (method_exists($model, 'bindNode')) { + $tmpRef = $model->bindNode($ref); + } + if (empty($tmpRef)) { + $ref = array('model' => $name, 'foreign_key' => $ref[$name][$model->primaryKey]); + } else { + if (is_string($tmpRef)) { + return $this->node($tmpRef); + } + $ref = $tmpRef; + } + } + if (is_array($ref)) { + foreach ($ref as $key => $val) { + if (strpos($key, $type) !== 0) { + unset($ref[$key]); + $ref["{$type}0.{$key}"] = $val; + } + } + $query = "SELECT {$type}.* From {$prefix}{$table} AS {$type} "; + $query .= "LEFT JOIN {$prefix}{$table} AS {$type}0 "; + $query .= "ON {$type}.lft <= {$type}0.lft AND {$type}.rght >= {$type}0.rght "; + $result = $this->query("{$query} " . $db->conditions($ref) ." ORDER BY {$type}.lft DESC", $this->cacheQueries); + + if (!$result) { + trigger_error("AclNode::node() - Couldn't find {$type} node identified by \"" . print_r($ref, true) . "\"", E_USER_WARNING); + } + } + return $result; + } +} +/** + * Short description for file. + * + * Long description for file + * + * + * @package cake + * @subpackage cake.cake.libs.model + */ +class Aco extends AclNode { +/** + * Model name + * + * @var string + */ + var $name = 'Aco'; +/** + * Binds to ARO nodes through permissions settings + * + * @var array + */ + var $hasAndBelongsToMany = array('Aro' => array('with' => 'Permission')); +} +/** + * Short description for file. + * + * Long description for file + * + * + * @package cake + * @subpackage cake.cake.libs.model + */ +class AcoAction extends AppModel { +/** + * Enter description here... + * + * @var unknown_type + */ + var $belongsTo = 'Aco'; +} +/** + * Short description for file. + * + * Long description for file + * + * + * @package cake + * @subpackage cake.cake.libs.model + */ +class Aro extends AclNode { +/** + * Enter description here... + * + * @var unknown_type + */ + var $name = 'Aro'; +/** + * Enter description here... + * + * @var unknown_type + */ + var $hasAndBelongsToMany = array('Aco' => array('with' => 'Permission')); +} +/** + * Short description for file. + * + * Long description for file + * + * + * @package cake + * @subpackage cake.cake.libs.model + */ +class Permission extends AppModel { + + var $useDbConfig = ACL_DATABASE; +/** + * Enter description here... + * + * @var unknown_type + */ + var $cacheQueries = false; +/** + * Enter description here... + * + * @var unknown_type + */ + var $name = 'Permission'; +/** + * Enter description here... + * + * @var unknown_type + */ + var $useTable = 'aros_acos'; +/** + * Enter description here... + * + * @var unknown_type + */ + var $belongsTo = 'Aro,Aco'; +/** + * Enter description here... + * + * @var unknown_type + */ + var $actsAs = null; +} ?> \ No newline at end of file diff --git a/cake/libs/model/ini_acl.php b/cake/libs/model/ini_acl.php index 3a6db778d..8532b161c 100644 --- a/cake/libs/model/ini_acl.php +++ b/cake/libs/model/ini_acl.php @@ -1,6 +1,5 @@