2012-06-04 18 views
6

Estoy tratando de establecer un sistema de autorización/autenticación, y me estoy confundido, así que tengo un par de preguntas:Diseñar/Cancan/Rolify juntos

  1. En una gran cantidad de tutoriales, las personas configuran una relación HABTM de usuario/rol. Entiendo que esto permite que cada usuario tenga múltiples roles, pero si desea que cada usuario tenga solo un rol, ¿es esto necesario? Si deseo tener opciones para usuarios "activos" e "inactivos", ¿deberían esos ser roles u otra cosa?
  2. En el wiki de Cancan, dice que si quieres que un usuario tenga un rol, solo debes hacerlo un atributo y luego usar "can : administrar,: todos si user.role ==" admin "", pero ¿No es eso peligroso porque cada vez que "admin" es solo una cadena? ¿Esto importa ? ¿Cuál es una mejor manera de lidiar con esto?

He intentado mi mejor esfuerzo para leer a través de la documentación de todo lo que implica y empecé con este tutorial

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

aunque también he leído http://starqle.com/articles/rails-3-authentication-and-authorization-with-devise-and-cancan-part-1/ y tonyamoyal.com/2010/09/29/rails-authentication-with-devise-and-cancan-part-2-restful-resources-for-administrators/

Simplemente no puedo hacer que funcione como quiero. ¿Cómo hago esto?

Respuesta

8

1. No es necesario para varias funciones o una mesa de papel

CanCan es agnóstico a cómo se definen las funciones de la aplicación. También podría tener un campo de función en su modelo de usuario.

En cuanto a los usuarios "activos" e "inactivos", tiene dos opciones. Podría tener un campo para ese estado, o podría tener un rol "inactivo" y considerar cualquier otro rol "activo". Esto depende de lo que quiere decir con "activo" y cómo está usando esa información en su aplicación.

2. No hay nada de malo en almacenar la función de un usuario en una cadena.

El hecho de que la función se almacene como una cadena no la hace menos segura. Sin embargo, debe usar attr_protected to prevent mass assignment del rol de usuario.

attr_protected :role 

De esta manera, los usuarios no podrán actualizar sus propias funciones.