Используя Devise/Cancan/Rolify вместе

Я пытаюсь настроить систему авторизации / аутентификации, и я запутался, поэтому у меня есть пара вопросов:

  1. Во многих уроках люди устанавливают отношения пользователя / роли HABTM. Я понимаю, что это позволяет каждому пользователю иметь несколько ролей, но если вы хотите, чтобы у каждого пользователя была только одна роль, нужно ли это? Если я хочу иметь опции для "активных" и "неактивных" пользователей, это должны быть роли или что-то еще?
  2. В вики Cancan говорится, что если вы хотите, чтобы у одного пользователя была одна роль, вы должны просто сделать его атрибутом, а затем использовать "can:manage,:all if user.role == "admin"", но разве это не так? опасно, потому что каждый раз "админ" это просто строка? Имеет ли это значение? Какой лучший способ справиться с этим?

Я старался изо всех сил, чтобы прочитать документацию для всего, и я начал с этого урока

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

хотя я также читал http://starqle.com/articles/rails-3-authentication-and-authorization-with-devise-and-cancan-part-1/ и tonyamoyal.com/2010/09/29/rails-Authentication-с-Devise-и-канкан-части-2-успокоительные-ресурсы-для-администраторов /

Я просто не могу заставить его работать так, как я хочу. Как мне это сделать?

1 ответ

Решение

1. Вам не нужно несколько ролей или таблица ролей

CanCan не зависит от того, как вы определяете роли в вашем приложении. Вы также можете легко иметь поле роли в вашей модели пользователя.

Что касается "активных" и "неактивных" пользователей, у вас есть два варианта. У вас может быть поле для этого статуса, или вы можете иметь "неактивную" роль и считать любую другую роль "активной". Это зависит от того, что вы подразумеваете под "активным" и как вы используете эту информацию в своем приложении.

2. Нет ничего плохого в сохранении роли пользователя в строке.

Тот факт, что роль хранится в виде строки, не делает ее менее безопасной. Однако вы должны использовать attr_protected для предотвращения массового назначения роли пользователя.

attr_protected :role

Таким образом, пользователи не смогут обновлять свои собственные роли.

Другие вопросы по тегам