Merb domanda di autenticazione
Domanda
La mia applicazione ha parte degli utenti e / parte admin. Ci sono 2 modelli di account (come un cliente) e Admin, e dovrebbero autenticare l'account e admin separatamente. Gli amministratori non devono accedere da parte di account e conti non dovrebbero accedere all'area di amministrazione. C'è qualche soluzione per me o che avrei dovuto scrivere 2 diverse applicazioni per gli utenti e gli amministratori e quindi attendere che Merb 1.1 e montarli in qualche modo in 1 app? Tutte le idee?
Soluzione
la tua domanda sembra molto interessante per me, il `VE ha avuto stessi problemi all'inizio. Quindi, posso suggerire soluzioni diverse da cui è possibile selezionare uno dipende la struttura app.
-
Se tutti gli utenti appartiene ad una classe, ma ha campo speciale (come UserClass = (: client: moderatore,: admin, etc.) `ll avere minimo di modifiche app, basta controllare il parametro classe utente nel vostro controller / vista. Penso che non è una buona idea per voi.
-
Le migliori pratiche - di utilizzare strategie di autenticazione Merb. E 'il meccanismo molto flessibile, in modo da poter selezionare le classi che si desidera lavorare.
Per esempio, si `ll avere 2 strategie di base: ClientAuth, AdminAuth. Entrambi utilizzeranno diverse classi utente (Client, Admin). Tutto ciò che serve - creare il file di strategia su misura e quindi collegarlo al router in questo modo:
authenticate(ClientAuth) do
match('/profile').to(:controller => ProfileController)
end
authenticate(AdminAuth) do
match('/admin').to(:controller => AdminController)
end
In alternativa, è possibile utilizzare l'autenticazione all'interno del controller:
class AdminController
:before ensure_authenticated, :with => [AdminAuth]
def index
... your stuff ...
end
end
Inoltre, è anche possibile utilizzare un solo controller per l'autenticazione per entrambe le classi che utilizzano entrambe le strategie in questo modo:
class AdminController
:before ensure_authenticated, :with => [AdminAuth, ClientAuth]
end
Il fatto di aver impostato le diverse classi di autenticazione (Admin, client) per le vostre strategie si sarà in grado di ottenere informazioni su di esso: session.user.class (si tratta di un metodo di rubino di base per scoprire il nome della classe di oggetti)
Ecco alcuni link utili: