2012-06-04 13 views
6

Próbuję skonfigurować system autoryzacji/uwierzytelnienia, a ja coraz mylić, więc mam kilka pytań:Korzystanie opracować/CanCan/Rolify razem

  1. W wielu tutoriali, ludzie ustawili relację HABTM między użytkownikiem a rolą. Rozumiem, że to pozwala każdemu użytkownikowi mieć wiele ról, ale jeśli chcesz, aby każdy użytkownik miał tylko jedną rolę, czy jest to konieczne? Jeśli chcę mieć opcje dla "aktywnych" i "nieaktywnych" użytkowników, czy te powinny być rolami czy czymś innym?
  2. W wiki wiki mówi, że jeśli chcesz, aby jeden użytkownik miał jedną rolę, powinieneś po prostu ustawić go jako atrybut, a następnie użyć "można : zarządzać,: wszystko jeśli user.role ==" admin "", ale czy nie jest to niebezpieczne, ponieważ za każdym razem "admin" jest tylko ciągiem znaków? Czy ten numer ma znaczenie? Jaki jest lepszy sposób radzenia sobie z tym?

Próbowałem mojej mocy, aby zapoznać się z dokumentacją dla wszystkich zaangażowanych i zacząłem z tym tutorialu

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

chociaż ja również czytać http://starqle.com/articles/rails-3-authentication-and-authorization-with-devise-and-cancan-part-1/ i tonyamoyal.com/2010/09/29/authentication-rails-with-devise-and-cancan-part-2-restful-resources-for-administrators/

Po prostu nie mogę sprawić, żeby działało tak, jak chcę. Jak mam to zrobic?

Odpowiedz

8

1. Nie trzeba do wielu ról lub stole roli

CanCan jest agnostykiem do sposobu zdefiniowania ról w swojej aplikacji. Równie łatwo możesz mieć pole ról w swoim modelu użytkownika.

Dla użytkowników "aktywnych" i "nieaktywnych" masz dwie opcje. Możesz mieć pole dla tego statusu lub możesz mieć rolę "nieaktywną" i uważać każdą inną rolę za "aktywną". To zależy od tego, co masz na myśli przez "aktywny" i jak używasz tych informacji w swojej aplikacji.

2. Nie ma nic złego w przechowywaniu roli użytkownika w ciągu znaków.

Fakt, że rola jest przechowywana jako ciąg nie czyni go mniej bezpiecznym. Powinieneś jednak użyć attr_protected to prevent mass assignment roli użytkownika.

attr_protected :role 

W ten sposób użytkownicy nie będą mogli aktualizować swoich ról.