| // +--------------------------------------------------------------------+ // // $Id$ // // +X2C Class 377 :SAMURAI_Perm /** * Chequeador de permisos. * * @package SAMURAI * @access public */ class SAMURAI_Perm { /** * Permisos. Es un array asociativo, donde la clave es un identificador de sistema y el valor un array con los permisos que tiene para ese sistema. * * @var array $permisos * @access protected */ var $_permisos = array(); /** * Sistema usado actualmente. * * @var int $sistema * @access protected */ var $_sistema; /** * Sets Sistema. * * @param int $sistema Sistema. * * @return void * @access public */ function setSistema($sistema) { $this->_sistema = $sistema; } // ~X2C // +X2C Operation 380 /** * Constructor. * * @param int $login Login del usuario para el cual obtener los permisos. * @param int $sistema Sistema con el cual se va a trabajar. * @param DB &$db Base de datos a usar. * * @return void * @access public */ function SAMURAI_Perm($login, $sistema, &$db) // ~X2C { $this->_sistema = $sistema; $query = ' SELECT DISTINCT psu.id_sistema AS sistema, pps.id_permiso AS permiso FROM samurai.perfil_sist_usuario AS psu, samurai.perm_perfil_sist AS pps WHERE psu.login = '.$db->quote($login).' AND psu.id_perfil = pps.id_perfil AND psu.id_sistema = pps.id_sistema'; foreach ($db->getAll($query, DB_FETCHMODE_ASSOC) as $row) { $this->_permisos[$row['sistema']][] = $row['permiso']; } } // -X2C // +X2C Operation 381 /** * Verifica si tiene un permiso. Se puede pasar parametros variables con un identificador de permiso o un array, por ejemplo: $perm->tiene(1, 4, array(2, 5, 67), 12); Si tiene algun permiso devuelve true. Si no se pasa ningun parametro ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el sistema actual. @see chequear() * * @return bool * @access public */ function tiene() // ~X2C { $args = func_get_args(); if (!$args) { return (boolean) @$this->_permisos[$this->_sistema]; } else { foreach ($args as $arg) { if (is_array($arg)) { if (@array_intersect($arg, $this->_permisos[$this->_sistema])) { return true; } } else { if (@in_array($arg, $this->_permisos[$this->_sistema])) { return true; } } } return false; } } // -X2C // +X2C Operation 385 /** * Obtiene una lista de permisos. Si se especifica un sistema, obtiene la lista de permisos para ese sistema. * * @param int $sistema Sistema del cual obtener la lista de permisos. * * @return array * @access public */ function getPermisos($sistema = '') // ~X2C { $sistema = $sistema ? $sistema : $this->_sistema; return @$this->_permisos[$sistema] ? $this->_permisos[$sistema] : array(); } // -X2C // +X2C Operation 388 /** * @return void * @access public */ function chequear() // ~X2C { $args = func_get_args(); if (!call_user_func_array(array($this, 'tiene'), $args)) { include 'MECON/includes/no_autorizado.html'; exit; } } // -X2C } // -X2C Class :SAMURAI_Perm ?>