]> git.llucax.com Git - mecon/samurai.git/blobdiff - lib/SAMURAI/Perm.php
BugFix.
[mecon/samurai.git] / lib / SAMURAI / Perm.php
index de949de264808d09353f9f5e58b1c37a1d711ec4..e4923f357183d0c8216d0f3751d28419594a1697 100644 (file)
@@ -30,6 +30,8 @@
 // +X2C Class 377 :SAMURAI_Perm
 /**
  * Chequeador de permisos.
+Para la libreria de perl: 
+@see perm.epl
  *
  * @package SAMURAI
  * @access public
@@ -51,6 +53,22 @@ class SAMURAI_Perm {
      */
     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.
      *
@@ -69,6 +87,8 @@ class SAMURAI_Perm {
     // +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.
@@ -83,16 +103,21 @@ class SAMURAI_Perm {
         $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, por ejemplo: $perm->tiene(1, 4, 9, 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.
+     * 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
@@ -105,11 +130,11 @@ class SAMURAI_Perm {
         } 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;
                      }
                 }
@@ -129,13 +154,91 @@ class SAMURAI_Perm {
      * @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