несколько ролей в рельсах - PullRequest
2 голосов
/ 13 июня 2011

Я хочу разработать систему на основе ролей, такую ​​как Basecamp. Пользователь может быть редактором бренда, а также он может быть работником другого бренда. Я использую devise + cancan. Как я могу создать базу данных для этой ситуации? Спасибо.

Ответы [ 2 ]

2 голосов
/ 13 июня 2011

Я бы порекомендовал образец для подражания.В этом сценарии пользователь будет have_and_belong_to_many :roles, а роль - have_and_belong_to_many :users.Это создает взаимосвязь между ролями и пользователями.См. this RailsGuide для получения дополнительной информации об ассоциациях.

В своем файле CanCan able.rb вы можете сделать что-то вроде этого (я просто догадываюсь при вашей настройке):

 can :manage, Brand do |brand|
  user.has_role?("brand_manager") && user.brands.include?(brand)
end

В вашем файле user.rb полезно написать что-то вродеэто:

def has_role?(name)
  role = Role.find_by_name(name)
  (self.roles.include?(role)) ? (return true) : (return false)
end

Надеюсь, это поможет.

0 голосов
/ 13 июня 2011

acl_system2 . Это старый плагин, но зацените его файл readme, чтобы посмотреть, служит ли он цели

...