2012-06-04 16 views
6

Sto cercando di creare un sistema di autorizzazione/autenticazione, e mi sto confuso, quindi ho un paio di domande:Utilizzando Devise/Cancan/Rolify insieme

  1. In un sacco di tutorial, le persone impostano una relazione HABTM utente/ruolo. Capisco che questo consenta a ciascun utente di avere più ruoli, ma se si desidera che ogni utente abbia un solo ruolo, è necessario? Se voglio avere le opzioni per gli utenti "attivi" e "inattivi", dovrebbero quei essere ruoli o qualcos'altro?
  2. Nella wiki di Cancan, si dice che se si desidera che un utente abbia un ruolo, è sufficiente impostarlo come attributo e quindi utilizzare "can : manage,: all if user.role ==" admin "", ma non è che pericoloso perché ogni volta "admin" è solo una stringa? Questo è lo ? Qual è un modo migliore per affrontare questo?

Ho fatto del mio meglio per leggere la documentazione per tutto ciò che riguarda e ho iniziato con questo tutorial

http://railsapps.github.com/tutorial-rails-bootstrap-devise-cancan.html

anche se ho anche letto http://starqle.com/articles/rails-3-authentication-and-authorization-with-devise-and-cancan-part-1/ e tonyamoyal.com/2010/09/29/rails-authentication-with-devise-and-cancan-part-2-restful-resources-per-administrators/

Non riesco davvero a farlo funzionare nel modo che voglio. Come faccio a fare questo?

risposta

8

1. Non è necessario a più ruoli o un tavolo ruolo

CanCan è agnostico per come si definisce ruoli nell'applicazione. Si potrebbe facilmente avere un campo ruolo nel modello utente.

Per quanto riguarda gli utenti "attivi" e "inattivi", sono disponibili due opzioni. Potresti avere un campo per quello stato, oppure potresti avere un ruolo "inattivo" e considerare qualsiasi altro ruolo "attivo". Questo dipende da cosa intendi per "attivo" e da come stai usando queste informazioni nella tua applicazione.

2. Non c'è niente di sbagliato con la memorizzazione del ruolo di un utente in una stringa.

Il fatto che il ruolo sia memorizzato come stringa non lo rende meno sicuro. Tuttavia, dovresti usare attr_protected to prevent mass assignment del ruolo utente.

attr_protected :role 

In questo modo, gli utenti non saranno in grado di aggiornare i propri ruoli.