/** 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; } }
public static function adminFullMenu() { global $ari; // $return = OOB_module::listModules ('enabled', false); $roles = array(); $mismodulos = array(); $return = false; if ($ari->get('user') == false) { return false; } //----------- // cache del menu para cada usuario // Set a id for this cache $id = 'admin_fullmenu__' . $ari->agent->getLang() . '__' . $ari->user->get('user') . '.php'; //Set cache options $options = array('cacheDir' => $ari->cachedir . DIRECTORY_SEPARATOR, 'lifeTime' => 9000, 'fileNameProtection' => false, 'automaticSerialization' => true); // 'onlyMemoryCaching' => true, // 'memoryCaching' => true // Create a Cache_Lite object $Cache_Lite = new Cache_Lite($options); // Test if thereis a valide cache for this id if ($return = $Cache_Lite->get($id)) { return $return; } else { // No valid cache found if ($roles = seguridad_role::myRoles($ari->get('user'))) { foreach ($roles as $role) { if ($mods = seguridad_role::listModulesFor($role)) { $mismodulos = array_merge($mismodulos, $mods); } } } // in some weird situations array_unique doesn't work, probably because // it s an object array $out = array(); $list = array(); foreach ($mismodulos as $key => $so) { if (!in_array($so->name(), $list)) { $list[] = $so->name(); $out[$key] = $so; } } $mismodulos = $out; if (count($mismodulos) > 0) { $i = 0; foreach ($mismodulos as $modula) { $menu = $modula->adminMenu(); if ($modula->isenabled() && count($menu)) { $return[$i]["name"] = $modula->nicename(); $return[$i]["id"] = $modula->name(); $return[$i]['menu'] = $menu; $i++; } } } $Cache_Lite->save($return); return $return; } }