costruzione area riservata

Link del progetto in working progress

http://umbriawayformazione.altervista.org/ci_project_glocal/ che rimanda per ora al primo modulo dinamico in costruzione http://umbriawayformazione.altervista.org/ci_project_glocal/index.php/ColleGalleryDynamic/collephotodynamics

Riassunto delle puntate precedenti

All’ indirizzo https://umbriawayinfo.wordpress.com/2021/03/12/territorio-storia-cultura-conoscere-le-risorse-che-hai-sotto-casa-con-glocal-web-app-come-mettere-in-moto-un-progetto-con-codeigniter-ottava-puntata/ abbiamo il primo black out dall’ inizio del progetto, è necessario quindi lavorare qui per riportare un pò di ordine e soprattutto senza gratificazioni immediate su una parte che sembrerebbe inutile, quella del commento del codice, ma che di fatto consente di sistemare meglio tutto l’applicativo e lo migliora in prospettiva

I commenti in php

Per quanto noioso possa essere devo essere in grado di ricordarmi quello che ho fatto 45 ere geologiche fa se riprendo in mano l’applicativo o anche solo ieri, quindi vediamo alcuni commenti che ho inserito nel controller principale della parte dinamica:

// entry level sulla pagina collegallerydynamic che sta alla base della navigazione per la parte pubblica

/* —————————
qui segue una triade di controller tutti con la stessa caratteristica, ossia scompongono la city in tre aree con lo scopo di estrapolare le foto legate alla parte di interesse, l’allunaggio avviene su una pagina che è sempre variabile, questo al momento riguardante solo tre pagine è accettabile come soluzione, ma se dovevamo gestire le foto di Los Angeles con molte pagine a supporto bisognava cambiare strategia con il Model
————————— */

/* —————————
segue ora una coppia di controller per estrapolare i dati relativaamente ai TAGS che al contrario delle public function precedenti hanno come atterraggio la stessa pagina
————————— */

/* —————————
qui siamo di fronte alla triade di gestione ossia il cuore del sistema che consente di dare visibilità o meno a certi contenuti, la gestione sulle session è anora per me da approfondire https://codeigniter.com/userguide3/index.html
————————— */

//questa graffa finale chiude la class di partenza ed è molto importante mantenerla

e per fortuna abbiamo fatto solo poche pagine se partivo in quarta che succedeva? A questo punto guardando il codice è tutto riconoscibile, so che cosa ho fatto sul mio controller del modulo dinamico anche se non me lo ricordo e potrebbe essere utile anche per altri se condividessi ad esempio la mia applicazione con GIT che al momento non è una necessità. Purtroppo o per fortuna questa operazione va fatta anche per il MODEL e anche qui il lavoro da fare con gli stessi criteri di sopra certo non manca. Inoltre è buona norma lavorare su un solo file alla volta o perlomeno con pochi, perchè altrimenti le TAB che affollano ATOM diventano oggetto di ulteriore kaos. Sul model cercherò di raggruppare le stesse tipologie di funzioni esattamente come ho fatto con il controller, in modo da trovare subito e capire quello che ho sotto gli occhi, vediamo anche qui qualcosa:

/*—————————
siamo passati ora dalla gestione categorie alla gestione tags, quindi avendo attivato i criteri di ricerca per giglio e trento come parole chiave e considerando che siamo di fronte a pubblico e privato, queste funzioni sono quattro, due per l’accesso in area pubblica e due per quella riservata privata
————————— */

/* —————————
ora andiamo ad esplodere le due pagine dettaglio con due query mirate i cui nomi delle funzioni però andavano gestiti meglio, da qui l’importanza di assegnare nomi coerenti e significativi quando si metteno in moto dei meccanismi che in questa fase sembrano raffazzonati
————————— */

//chiusura della classe fare attenzione alla graffa che segue

Ok abbiamo perso del tempo ma ne è valsa la pena, non solo sappiamo dove mettere le mani e di che cosa stiamo parlando, ma abbiamo anche visto che qualcosa non è stato proprio impeccabile e posso migliorare quando progetterò i prossimi moduli, anche qui occorre valutare se contrassegnare ogni funzione e anche il nome dei file con dei prefissi utili che richiamano il modulo di lavoro, mi servirebbe una convenzione che migliori la semantica espressiva delle singole voci senza indurre a confusione!

La costruzione dell’ area riservata

Abbiamo detto che in assenza di autorizzazione a divulgare in rete dobbiamo tutelare le fonti che magari non vogliono essere citate per cui momentaneamente esiste un area riservata che ha una pagina di login molto spartana che in futuro sarebbe da migliorare:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');
?><!DOCTYPE html>
<html>
<head>
<title>Glocal Login</title>
<style>
input[type=text], select {
  width: 100%;
  padding: 12px 20px;
  margin: 8px 0;
  display: inline-block;
  border: 1px solid #ccc;
  border-radius: 4px;
  box-sizing: border-box;
}

input[type=submit] {
  width: 100%;
  background-color: midnightblue;
  color: white;
  padding: 14px 20px;
  margin: 8px 0;
  border: none;
  border-radius: 4px;
  cursor: pointer;
}

input[type=submit]:hover {
  background-color:#28527a;
}

div {
width: 40%;
  border-radius: 5px;
  background-color: lightskyblue;
  padding: 20px;
  margin-left:30%;
  margin-top:10%;
}
</style>
</head>

<body style="background:cyan">
<div align="center">
<h2><a style="text-decoration:none" href="<?php echo site_url();?>">HOME</a></h2>
  <?php echo isset($error) ? $error : ''; ?>
  <form method="post" action="<?php echo site_url();?>/ColleGalleryDynamic/elaborazione">
  <!-- <form action="/action_page.php"> -->
    <label for="fname">Username</label>
    <input type="text" id="username" name="username" placeholder="">
    <label for="lname">Password</label>
    <input type="text" id="pwd" name="password" placeholder="">
    <input type="submit" value="Login" name="autorizzato">
  </form>
</div>
</body>
</html>

In questa pagina ci sono cose molto interessanti dall’ individuazione di errori in caso di dati sbagliati immessi nel form che verranno segnalati in testa alla pagina, al successivo invio dei dati raccolti alla pagina di elaborazione con l’attributo ACTION etc, la pagina elaborazione crea due contenitori ciascuno che cattura i valori dei campi testo del form, dopodiche confronta questi valori con le stringhe digitate e se sono correttamente inserite pescando la query dal model spedisce l’utente alla pagina riservata altrimenti la funzione riporta semplicemente gli errori commessi in alto nel form. Dopo il confronto delle stringhe si assiste all’ attivazione della sessione che avviene con il metodo set_userdata, dopodichè il controller fa quello che fa sempre di sotto e cioé pescando dal model rispedisce i dati ottenuti alla vista che altro non è che l’area riservata e che naturalmente non può che essere protetta, infatti se copiassimo URL e andassimo su altro browser ci verrebbe segnalato un reindirizzamento alla pagina di login proprio perchè la funzione del controller usa l’istruzione condizionale IF-ELSE dove ELSE fa un redirect alla pagina di LOGIN per indicare che qualcosa è andato storto se la variabile user non è presente (e che sta a significare che il campo form corrispondente non è stato riempito):

$this->session->set_userdata(array('user'=>$user));
$data['result'] = $this->Model->ottieniDati();
$this->load->view('home', $data);

La sessione: come proteggere le altre pagine

Premesso che in questo momento non ci sono dati sensibili particolari degni di scomodare pirati informatici incalliti e affamati come lupi in una foresta e che quindi non vi è la necessità di proteggere nessuna pagina, il meccanismo di protezione delle altre pagine con la session dovrebbe essere semplice in teoria, una funzione SUL CONTROLLER del tipo:

public function nomeDaTeScelto()	{
if ($this->session->userdata('user')) {
$keys = $this->input->get('keys');
$data['allresult'] = $this->Collegallery_Model->datiPrivati($keys);
$this->load->view('tagdetails1', $data);
}else{
$keys = $this->input->get('keys');
$data['allresult'] = $this->Collegallery_Model->datiPubblici($keys);
$this->load->view('tagdetails', $data);
}
}

Proviamo in questa maniera abbiamo riscontrato che non funziona, quindi proviamo a scrivere lo stesso principio sul MODEL, qualcosa del tipo:

  function getNome($keys)
  {
    if ($this->session->userdata('user')) {
      $query = $this->db->query("
      select * from nometable
      where keys='" . $keys . "'
      ");
      return $query->result();
    }else{
      show_error('<a href="http://umbriawayformazione.altervista.org/ci_project_glocal/nomecontroller/nomemetodo">HOME</a> - devi loggarti per visionare l\'area riservata!');
    }
  }

Le guerre si vincono anche perdendo le battaglie

Facciamo un’ altra partita?

Abbiamo alzato bandiera bianca! Dichiariamo la battaglia momentaneamente persa vs il terribile esercito delle sessioni per quanto riguarda la protezione di pagine specifiche, abbiamo provato in vari modi ad avvolgere le funzioni che danno visibilità a una pagina critica ma senza ottenere risultati degni di rilievo (si tratta di copiare il link dopo l’accesso alla pagina di login su altro browser come verifica). Rimane però l’area riservata attiva e funzionante in quanto nessuno ha la sfera di cristallo per vedere all’ interno delle URL ed estrapolare nomi di controller e metodi che tra l’altro sono anche molto difficili da inventare essendo la notazione case-sensitive, per cui siamo COMUNQUE TUTELATI da sguardi indiscreti esterni se non vogliamo per mancanza di autorizzazioni ufficiali divulgare i contenuti in possesso. Inoltre questi dati non hanno nulla a che fare con carte di credito e codici iban quindi non corriamo nessun rischio di sorta, la vedo dura finire al gabbio perchè ho permesso di catturare contenuti indiscreti inediti sul Vescovo Florenzi nel 1614!

Studiare la teoria

La sconfitta appena subita ci fa focalizzare su un tipo di esigenza pratica, se vogliamo migliorare con codeigniter dobbiamo studiare anche la teoria e non solo partire in quarta con la pratica, il manuale di CI dovrebbe sostituire quello biblico presente sul nostro comodino: https://codeigniter.com/userguide3/index.html

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...