/** 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; } }