Esiste un approccio ottimale per l'implementazione dei ruoli utente quando si utilizzano RESTful resource route?Struttura dell'app per risorse RESTful basate su ruoli
Dire che ho le seguenti risorse:
User has_many Tickets
Event has_many Tickets
Ticket belongs_to Person, Event
e poi dire ulteriormente Ho due tipi di utenti: i clienti e gli agenti. Entrambi si collegheranno al sistema, ma con accesso alle risorse e funzionalità diverse in base ai loro ruoli. Per esempio:
I clienti possono accedere:
- indice evento, esposizione
- indice di biglietteria (ambito dall'utente), spettacolo, comprare/creare, ritorno/cancellare
- persona di creare, spettacolo, aggiornamento
agenti possono accedere a:
- indice di evento, esposizione, creare, aggiornare, cancellare
- indice di biglietteria, spettacolo, vendere/creare, aggiornare il rimborso/cancellazione
- indice di una persona, spettacolo, creare, aggiornare, cancellare
Quale dei 4 gli approcci generali di seguito saranno più puliti e più flessibili?
controller separati all'interno di cartelle di ruoli e risorse in spazi dei nomi, come ad esempio:
namespace "agent" do
resources :events, :tickets, :people
end
namespace "customer" do
resources :events, :tickets, :people
end
controller separati per funzione, per esempio:
AgentController
def sell_ticket, etc
CustomerController
def buy_ticket, etc
regolatori condivisi con azioni separate dove necessario, ad esempio:
TicketController
before_filter :customer_access, :only => :buy
before_filter :agent_access, :except => :buy
def buy #accessed by customer to create ticket
def sell #accessed by agent to create ticket
Azioni condivise con istruzioni condizionali, ad es .:
Tuttavia, il modello non è a conoscenza dell'utente che ha effettuato l'autenticazione. Di solito è gestito dal controller. Inoltre, l'OP sta chiedendo il modo migliore per gestire la sicurezza. Questo non può essere personalizzato nelle visualizzazioni. Che mi dici delle connessioni API? Come si applica la sicurezza per i diversi ruoli utente lì? Non si desidera ripetere il codice, quindi deve essere in un posto centrale, ad esempio: controller. Quindi la domanda è: come si può gestire il controller con cura per aggiungere questo tipo di controllo sui ruoli e le autorizzazioni degli utenti. –