/** Sincroniza las tablas de acciones */ public static function synchronizeActions($arrayModules = false) { global $ari; $clause = ""; if ($arrayModules) { if (!is_array($arrayModules)) { //es un solo modulo $moduleName = $ari->db->qMagic($arrayModules); $clause = " AND p_origen.modulename = {$moduleName} "; } else { //es un array con los nombres de los modulos de los permisos a sincronizar $first = true; $lista = false; foreach ($arrayModules as $moduleName) { $moduleName = $ari->db->qMagic($moduleName); if ($first) { $lista = $moduleName; $first = false; } else { $lista = $lista . "," . $moduleName; } } if ($lista) { $clause = " AND p_origen.modulename IN ({$lista}) "; } } } //security_permission: ID, ModuleName, Name, NiceName //security_action: ID, PermissionID, Name, NiceName, inMenu $sql = "SELECT a_origen.Name AS aName, a_origen.NiceName AS aNiceName, a_origen.inMenu AS aInMenu,\n\t\t\t\t\t p_origen.Name AS pName, p_origen.ModuleName AS pModuleName \n\t\t\t\tFROM security_permission_other p_origen, security_action_other a_origen\n\t\t\t\tWHERE p_origen.ID = a_origen.PermissionID\n\t\t\t\t{$clause}\n\t\t\t\tAND NOT EXISTS\n\t\t\t\t\t\t\t\t(\tSELECT 1\n\t\t\t\t\t\t\t\t\tFROM security_permission p_destino, security_action a_destino\n\t\t\t\t\t\t\t\t\tWHERE p_destino.ID = a_destino.PermissionID\n\t\t\t\t\t\t\t\t\tAND p_destino.name = p_origen.name \n\t\t\t\t\t\t\t\t\tAND p_destino.modulename = p_origen.modulename\n\t\t\t\t\t\t\t\t\tAND a_destino.name = a_origen.name\n\t\t\t\t\t\t\t\t)\n\t\t\t\t"; //echo $sql; //exit; $savem = $ari->db->SetFetchMode(ADODB_FETCH_ASSOC); $rs = $ari->db->Execute($sql); $ari->db->SetFetchMode($savem); if ($rs && !$rs->EOF) { while (!$rs->EOF) { $permission = self::nameConstructor($rs->fields["pName"], $rs->fields["pModuleName"]); //var_dump();exit; $action = new seguridad_action(ID_UNDEFINED); $action->set('name', $rs->fields["aName"]); $action->set('nicename', $rs->fields["aNiceName"]); $action->set('inmenu', $rs->fields["aInMenu"]); $action->set('permission', $permission); $action->store(); $rs->MoveNext(); } //end while $rs->Close(); } }
/** Devuelve la accion ($accion), * perteneciente al permiso ($permission) * del modulo ($module) */ public static function nameConstructor($action, $permission, $module) { global $ari; $action = $ari->db->qMagic($action); $permission = $ari->db->qMagic($permission); $module = $ari->db->qMagic($module); $savem = $ari->db->SetFetchMode(ADODB_FETCH_ASSOC); // $ari->db->SetFetchMode($savem); $sql = "SELECT A.ID, A.PermissionID, A.Name, A.NiceName, A.InMenu \n \t\t FROM Security_Action A, Security_Permission P \n \t WHERE A.PermissionID = P.ID \n\t\t\t AND A.Name = {$action} \t \n AND P.Name = {$permission} \n\t\t\t AND P.ModuleName = {$module}"; // $rs = $ari->db->Execute( $sql); $rs = $ari->db->CacheExecute(SQL_CACHE, $sql); $ari->db->SetFetchMode($savem); if (!$rs->EOF) { $action = new seguridad_action(ID_UNDEFINED); $action->set('action', $rs->fields["ID"]); $action->set('name', $rs->fields["Name"]); $action->set('nicename', $rs->fields["NiceName"]); $action->set('inmenu', $rs->fields["InMenu"]); $permiso = new seguridad_permission($rs->fields['PermissionID']); $action->set('permission', $permiso); } else { var_export($action, true); var_export($permission, true); var_export($module, true); throw new OOB_exception("Invalid action: A: " . var_export($action, true) . ',P: ' . var_export($permission, true) . ',M: ' . var_export($module, true), "403", "Invalid Action", true); } return $action; }
$array_values['modules'] = $modules; refrescar($array_values); } else { $storeOk = true; //verificar datos enviados duplicados if (!$sp->Validar()) { $ari->error->addError('seguridad_action', 'SENT_DUPLICATE_DATA'); } if (!isset($_POST['modulo'])) { $storeOk = false; $ari->error->addError("seguridad_action", "NO_ACTION"); } else { for ($i = 0; $i < count($_POST['modulo']); $i++) { $accion = new seguridad_action(); if (isset($_POST['accion'][$i])) { $accion->set('name', $_POST['accion'][$i]); } if (isset($_POST['nicename'][$i])) { $accion->set('nicename', $_POST['nicename'][$i]); } if (isset($_POST['permiso'][$i])) { $permiso = new seguridad_permission($_POST['permiso'][$i]); $accion->set('permission', $permiso); } if (isset($_POST['inmenu'][$i])) { $accion->set('inmenu', $_POST['inmenu'][$i]); } if (!$accion->store()) { $storeOk = false; } }