// +X2C Class 377 :SAMURAI_Perm
/**
* Chequeador de permisos.
+Para la libreria de perl:
+@see perm.epl
*
* @package SAMURAI
* @access public
*/
var $_sistema;
+ /**
+ * Base de datos a usar en las conexiones.
+ *
+ * @var DB $db
+ * @access protected
+ */
+ var $_db;
+
+ /**
+ * Observaciones de los permisos.
+ *
+ * @var array $observaciones
+ * @access protected
+ */
+ var $_observaciones = array();
+
/**
* Sets Sistema.
*
// +X2C Operation 380
/**
* Constructor.
+Para la libreria de perl:
+@see perm.epl
*
* @param int $login Login del usuario para el cual obtener los permisos.
* @param int $sistema Sistema con el cual se va a trabajar.
$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;';
+ 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'];
}
+ $this->_db =& $db;
}
// -X2C
// +X2C Operation 381
/**
* Verifica si tiene un permiso.
-Se puede pasar par?etros variables con un identificador de permiso o un array, por ejemplo: $perm->tiene(1, 4, array(2, 5, 67), 12); Si tiene algn permiso devuelve true.
-Si no se pasa ningn p?ametro ($perm->tiene()), devuelve true si tiene un permiso (al menos uno) en el sistema actual.
+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
} else {
foreach ($args as $arg) {
if (is_array($arg)) {
- if (array_intersect($arg, @$this->_permisos[$this->_sistema])) {
+ if (@array_intersect($arg, $this->_permisos[$this->_sistema])) {
return true;
}
} else {
- if (in_array($arg, @$this->_permisos[$this->_sistema])) {
+ if (@in_array($arg, $this->_permisos[$this->_sistema])) {
return true;
}
}
* @return array
* @access public
*/
- function getPermisos($sistema = '') // ~X2C
+ function getPermisos($sistema = null) // ~X2C
{
- $sistema = $sistema ? $sistema : $this->_sistema;
+ $sistema = is_null($sistema) ? $this->_sistema : $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 Operation 391
+ /**
+ * Obtiene las observaciones de un permiso para un sistema.
+ *
+ * @param int $perm Obtiene las observaciones de un permiso para un sistema.
+ * @param int $sistema Sistema al cual pertenecen los permisos.
+ *
+ * @return array
+ * @access public
+ */
+ function getObservaciones($perm, $sistema = null) // ~X2C
+ {
+ $sistema = is_null($sistema) ? $this->_sistema : $sistema;
+ if (!@is_array($this->_observaciones[$sistema][$perm])) {
+ $this->_observaciones[$sistema][$perm] = array();
+ $query = '
+ SELECT ps.observaciones AS observaciones
+ FROM samurai.perm_sist AS ps
+ WHERE ps.id_permiso = '.$this->_db->quote($perm).'
+ AND ps.id_sistema = '.$this->_db->quote($sistema);
+ foreach ($this->_db->getAll($query, DB_FETCHMODE_ASSOC) as $row) {
+ $this->_observaciones[$sistema][$perm][] = $row['observaciones'];
+ }
+ }
+ return $this->_observaciones[$sistema][$perm];
+ }
+ // -X2C
+
+ /**
+ * Obtiene los datos de los usuarios que tienen el permiso indicado.
+ *
+ * @param db $db Base de datos.
+ * @param int $sistema Identificador del sistema al que pertenece el permiso.
+ * @param int $perm Identificador del permiso.
+ * @param string $obs Observación de la asignación del permiso.
+ *
+ * @return array
+ * @access public
+ * @static
+ */
+ function getUsuariosPermiso (&$db, $sistema, $perm, $obs = null)
+ {
+ $sql = "SELECT PSU.login,
+ U.nombre,
+ LEFT (P.desc_perfil, LOCATE(' ', P.desc_perfil)) desc_perfil
+ FROM samurai.perfil_sist_usuario AS PSU,
+ usuario.Usuario AS U,
+ samurai.perm_perfil_sist AS PPS,
+ samurai.perfil AS P
+ WHERE U.login = PSU.login AND
+ PSU.id_perfil = PPS.id_perfil AND
+ PPS.id_perfil = P.id_perfil AND
+ PSU.id_sistema = $sistema AND
+ PPS.id_permiso = $perm ";
+
+ $sql.= (is_null($obs))?
+ " ORDER BY U.nombre":
+ " AND PPS.observaciones = '". $obs. "' ORDER BY U.nombre";
+
+ return $db->getAll($sql);
+
+ }
+
} // -X2C Class :SAMURAI_Perm
?>
\ No newline at end of file