KumbiaPHP beta2-dev
Framework PHP en español
|
00001 <?php 00028 abstract class Acl2 00029 { 00035 protected static $_defaultAdapter = 'simple'; 00036 00044 public function check($resource, $user) 00045 { 00046 // Itera en los roles de usuario 00047 foreach($this->_getUserRoles($user) as $role) { 00048 if($this->_checkRole($role, $resource)) { 00049 return TRUE; 00050 } 00051 } 00052 00053 // Por defecto se niega el acceso 00054 return FALSE; 00055 } 00056 00064 private function _checkRole($role, $resource) 00065 { 00066 // Verificar si el rol puede acceder al recurso 00067 if(in_array($resource, $this->_getRoleResources($role))) { 00068 return TRUE; 00069 } 00070 00071 // Verifica si ha heredado el acceso, verificando los recursos de los padres 00072 foreach($this->_getRoleParents($role) as $parent) { 00073 if($this->_checkRole($parent, $resource)) { 00074 return TRUE; 00075 } 00076 } 00077 00078 return FALSE; 00079 } 00080 00087 abstract protected function _getUserRoles($user); 00088 00095 abstract protected function _getRoleResources($role); 00096 00103 abstract protected function _getRoleParents($role); 00104 00110 public static function factory($adapter = NULL) 00111 { 00112 if(!$adapter) { 00113 $adapter = self::$_defaultAdapter; 00114 } 00115 00116 require_once CORE_PATH . "libs/acl2/adapters/{$adapter}_acl.php"; 00117 $class = $adapter.'acl'; 00118 00119 return new $class; 00120 } 00121 00127 public static function setDefault ($adapter) 00128 { 00129 self::$_defaultAdapter = $adapter; 00130 } 00131 }