Example #1
0
 /** este metodo devuelve true si el usuario tiene permiso para la accion dada en un objeto
  * $object = un objeto
  * $action = la accion para el permiso (seguridad_action)
  * $user = el usuario del que se busca el permiso (oob_user)
  * $tree (opcional)(oob_tree_node) = este hace una busqueda recursiva sobre un arbol (a partir de un nodo), para ver si el objeto padre tiene permiso
  */
 public static function isObjectAllowed($object, $action, $user, $node = false)
 {
     if (!is_a($action, 'seguridad_action')) {
         return false;
     }
     if (!is_object($object)) {
         return false;
     }
     if ($user == false || is_a($user, 'oob_user')) {
     } else {
         return false;
     }
     $currentUserRoles =& seguridad_role::myRoles($user);
     if (!seguridad::getPermissionForAnyObject($action, $currentUserRoles, $object)) {
         //saltamos al otro metodo
         if ($node !== false) {
             if (!is_a($node, 'OOB_tree_node')) {
                 return false;
             }
             $arbol = new OOB_tree($node->treename(), false);
             $tree =& $arbol->getParents($node, false);
             if ($roles = seguridad_role::listRoles(USED, 'name', OPERATOR_EQUAL)) {
                 $arrayRoles = array();
                 foreach ($roles as $r) {
                     //verifico si tiene permiso de ver
                     if (seguridad::getObjectPermission($action, $r, $object)) {
                         $arrayRoles[] = true;
                     }
                 }
             }
             //end if reload de seguridad
             if (count($arrayRoles) > 0) {
                 return false;
             } else {
                 return seguridad::isObjectAllowedByInheritance($action, $currentUserRoles, $tree);
             }
         }
         // end salto
         return false;
     } else {
         return true;
     }
 }