/** Retorna true si el usuario pasado como parametro tiene permiso para la accion * pasada como parametro en la perspectiva pasada como parametro * */ public static function isAllowed($action, $perspective = NO_OBJECT, $user = NO_OBJECT) { global $ari; if (!is_a($action, 'seguridad_action')) { $action = new seguridad_action($action); } if (!is_a($perspective, 'OOB_perspective')) { $perspective = $ari->get('perspective'); } //obtengo el modulo de la accion if ($module = $action->myModule()) { /* verfico que la perspectiva tenga el módulo o estemos en el administrador */ if ($perspective->isMember($module) || $ari->get("mode") == "admin") { // la perspectiva contiene el modulo /* verifico que el usuario tenga permiso para esa accion */ if (!is_a($user, "oob_user")) { $user = $ari->get("user"); } //@verificar cuando my roles devuelve false if (seguridad_action::exists($action, seguridad_role::myRoles($user))) { //tiene permiso $return = true; } else { //no tiene permiso $return = false; } } else { // error el modulo no pertence a la perspectiva $return = false; } } else { // error la accion no pertenece a ningun modulo $return = false; } return $return; }
/** */ public function addAction($action) { global $ari; if (is_a($action, 'seguridad_action')) { if (seguridad_action::exists($action, $this)) { return true; } else { //falta validar si existe el módulo $ari->db->StartTrans(); $action_id = $ari->db->qMagic($action->get('action')); $role_id = $ari->db->qMagic($this->role); $sql = "INSERT INTO security_actionsrole \n\t\t\t\t\t (ActionID, RoleID)\n\t\t\t\t\t VALUES ({$action_id}, {$role_id} )"; $ari->db->Execute($sql); if (!$ari->db->CompleteTrans()) { throw new OOB_exception("Error en DB: {$ari->db->ErrorMsg()}", "010", "Error en la Base de Datos", false); //return false; } else { return true; } } } else { $ari->error->addError("seguridad_role", "INVALID_ACTION"); return false; } }
foreach ($permisos as $p) { $permiso = array(); $permiso['leaf'] = false; $permiso['expanded'] = true; $permiso['id'] = "p_" . $p->get("permission"); $permiso['text'] = $p->get("nicename"); $permiso['children'] = array(); $permiso['iconCls'] = 'Clspermiso'; if ($acciones = seguridad_action::listActionsFor($p, ALL_MENU)) { foreach ($acciones as $a) { $accion = array(); $accion['leaf'] = true; $accion['id'] = "a_" . $a->get("action"); $accion['text'] = $a->get("nicename"); $accion['iconCls'] = 'Clsaccion'; if (seguridad_action::exists($a, $role)) { $accion['checked'] = true; } else { $accion['checked'] = false; } $permiso['children'][] = $accion; } } $padre['children'][] = $permiso; } } $modulos[] = $padre; } } //RESULTADO $obj_comunication = new OOB_ext_comunication();