Come posso gestire in modo pulito una serie di permutazioni della richiesta di risorsa, (facoltativo) Controllo accesso, Risultato risorsa?

1

Ogni volta che un utente interagisce con una risorsa mentre non è loggato, ho bisogno di:

  1. Reindirizza a una pagina protetta.
  2. Mostra una finestra di accesso / accesso (che di solito è parzialmente personalizzata in base alla risorsa e potrebbe contenere un collegamento a una versione senza accesso della risorsa).
  3. Invia l'utente alla risorsa (se effettua il login).

Questo è un problema relativamente comune / semplice, ma sfortunatamente ci sono diverse grinze:

  1. Esistono diversi tipi di risorse, ognuna delle quali ha un controllo di accesso leggermente diverso.
  2. Alcune risorse richiedono una logica aziendale personalizzata e / o controlli di accesso.
  3. Alcuni stati utente richiedono una logica aziendale personalizzata e / o controlli di accesso.

Il mio approccio attuale, cresciuto organicamente nel tempo da più sviluppatori:

  1. Quando un utente richiede una risorsa, l'oggetto risorsa ne esegue uno o più di quanto segue:
    A) Riempire un oggetto stato nella sessione dell'utente.
    B) Creare una stringa di query basata sulla corrente stato e sulla risorsa richiesta.
    C) Indirizza l'utente a una pagina sicura.
  2. Altri controlli sulla pagina rilevano A-C. Uno di questi controlli esegue il rendering di una finestra di dialogo di accesso.
  3. La finestra di dialogo di accesso invia l'utente alla pagina risultante.

Funziona, ma ha diversi problemi:

  1. Il codice responsabile della gestione delle richieste di risorse è completamente indipendente dal codice che genera le richieste. In effetti, l'oggetto stato è una variabile globale specifica dell'utente.
  2. Il codice responsabile della gestione delle richieste di risorse per gli utenti registrati è strongmente separato dalle richieste di risorse di gestione codice per gli utenti non loggati, anche se è strongmente sovrapposto. Si noti che questo è un problema di indirezione (ad esempio, la duplicazione del codice viene per lo più evitata a favore di livelli di riferimento indiretto e chiamate strongmente nidificate al codice condiviso).
  3. Il codice è alquanto fragile; ci sono molti modi in cui può rompersi.

Come posso ripulirlo? Sto pensando di aggiungere un'azione (o una macchina a stati) all'oggetto di stato. Ciò darebbe all'oggetto di richiesta risorse il controllo diretto sull'oggetto risultato risorsa, piuttosto che il controllo indiretto tramite il controllo di accesso. Tuttavia, questo in realtà non mi sembra sufficiente per semplificare la logica.

Note:

  1. Sto usando i webform di asp.net con .Net 4.0.
  2. Non mi interessa se l'oggetto della sessione è serializzabile.
posta Brian 01.10.2015 - 23:17
fonte

1 risposta

1

The problem I'm trying to solve is how to give the request result the data more cleanly; the login form already has the data, but that's why it's complicated; the data is being ferried from the resource request to the login form to the resource result. Also, keep in mind that the login form is completely independent from the resource request (and a given resource may be connectable to more than one login form, depending on context).

Si scopre che il 90% di questo può essere risolto con

  1. Modifica dell'URL di origine in una pagina SSL.
  2. Modifica del reindirizzamento in un postback.
  3. Al clic, imposta target del modulo su _blank

La chiave che mi mancava era la # 3. In caso contrario, le regole della logica aziendale come "continua questo flusso in una nuova finestra" richiedono di trasferire i dati.

    
risposta data 31.08.2016 - 22:08
fonte

Leggi altre domande sui tag