У меня есть Rails-приложение, которое обслуживает разные сайты. Например.
- www.example1.com
- www.example2.com
Эти сайты хранятся в Site
-модели. Также я настроил систему ролей пользователей, используя Devise
, Rolify
и cancancan
.
Теперь у одного пользователя могут быть разные роли на разных сайтах. Например, он может быть администратором на www.example1.com
, но только простым пользователем на www.example2.com
.
Я загружаю разрешения пользователей в модели способностей. Теперь мой вопрос: Где вызывается эта "инициализация"-функция? Мне нужно дать этой функции дополнительный параметр site_id
, чтобы загружались только соответствующие права сайта, а не один из другая сторона. Как это сделать?
models/ability.rb
class Ability
include CanCan::Ability
# From where is this function called, and how can I adjust this call?
def initialize(user, site_id)
return false unless user.present?
user_role = user.users_roles.find_by(site_id: site_id).try(:role)
user_role.permissions.each do |p|
if p.permission_subject_id.nil?
can p.permission_action.to_sym, p.permission_subject_class.constantize
else
can p.permission_action.to_sym, p.permission_subject_class.constantize, id: p.subject_id
end
end unless user_role.nil?
end
end