Progettazione di un sistema di ticketing in cui Utente e Amministratore hanno funzionalità simili ma diverse

6

Sto progettando un semplice sistema di ticketing in Laravel 4. Il sistema consentirà semplicemente a un utente di creare un ticket e un amministratore di rispondere.

L'utente sarà in grado di:

  • Visualizza un elenco di i suoi biglietti.
  • Crea un nuovo ticket.
  • Visualizza le risposte a uno dei i suoi ticket.
  • Aggiungi una risposta a uno dei i suoi ticket.
  • Chiudi uno dei suoi ticket.
  • Esegui le attività sopraindicate tramite l'URL www.example.com/ supporto

L'amministratore sarà in grado di:

  • Visualizza un elenco di tutti biglietti
  • Impossibile creare un nuovo ticket.
  • Visualizza le risposte a qualsiasi ticket .
  • Aggiungi una risposta a qualsiasi biglietto
  • Chiudi qualsiasi ticket .
  • Esegui le attività sopraindicate tramite l'URL www.example.com/ admin / support

In altre parole, un utente e un amministratore possono eseguire funzionalità molto simili, ma diverse. Quali sono i modi in cui posso progettare questo sistema per ridurre la quantità di copia e incolla da eseguire?

Finora, ho trovato due possibilità.

  1. Crea due serie di rotte con due controller: uno per l'utente e uno per l'amministratore. Copia e incolla la maggior parte della logica tra i controller, ma modifica alcune variabili in modo che gli utenti possano vedere solo i propri ticket. Entrambi i controller condividono le stesse visualizzazioni e il medesimo modello. Aggiungi un ulteriore controllo nelle Visualizzazioni in modo che l'amministratore non veda un pulsante per creare un nuovo ticket.

    Il lato negativo di questo è che devo inserire la logica nelle viste per nascondere alcune cose dall'amministratore e altre cose da parte dell'utente. Sto anche copiando e incollando il codice tra i controller.

  2. Crea due serie di Rotte ma usa lo stesso Controller. Utilizzare le istruzioni if nel Controller per mostrare Visualizzazioni diverse a seconda che si tratti di un Utente o di un Amministratore.

    Tuttavia, ora sto copiando e incollando il codice tra le viste. Avere due diversi set di logica nello stesso controller potrebbe anche creare confusione.

C'è un modo migliore per farlo?

    
posta Zsw 25.08.2015 - 21:31
fonte

2 risposte

3

Scrivi due interfacce utente diverse.

Davvero. Lavoro ogni giorno su un sistema del genere e l'esperienza utente per User e Administrator personae è completamente diversa. Sono diversi perché le esigenze di questi utenti sono completamente diverse.

Administrator s trascorrerà gran parte della giornata con la lista dei biglietti aperta di fronte a loro, interagendo con i biglietti avanti e indietro tutto il giorno. L'interfaccia utente Administrator deve essere efficiente e potente, come si conviene all'applicazione principale utilizzata dai suoi umani.

User s andrà al tuo sito una volta in un tempo raro, crea un ticket, controlla un ticket e se ne va. L'interfaccia utente User deve essere semplice da comprendere e navigare e non richiede quasi nessun pensiero da utilizzare, come si addice a un'applicazione raramente utilizzata.

    
risposta data 26.09.2015 - 03:24
fonte
1

Hai esaminato le autorizzazioni basate sui ruoli? Un controller, una rotta, restituisce / accetta risultati diversi a seconda del ruolo dell'utente.

es. una richiesta GET per link restituirà tutti i ticket se il richiedente è un amministratore, o altrimenti i biglietti dell'utente. Un post per questa rotta restituirà 200 per utente, ma errore 40x (405 si adatterebbe qui, credo?) Per l'amministratore. Ecc.

    
risposta data 26.08.2015 - 19:57
fonte

Leggi altre domande sui tag