Пример #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;
     }
 }
Пример #2
0
 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;
     }
 }