Система ролей пользователей Rails - один и тот же пользователь с несколькими правами на разных сайтах
У меня есть Rails-приложение, которое обслуживает разные сайты. Например
- www.example1.com
- www.example2.com
Эти сайты хранятся в Site
-модели. Также я настроил систему User-Role, используя Devise
, Rolify
, а также cancancan
Теперь один пользователь может иметь разные роли на разных сайтах. Например, он может быть администратором на www.example1.com
, но только простой пользователь на www.example2.com
Я загружаю разрешения пользователей в модели способностей. Теперь мой вопрос: где эта функция инициализации называется? Мне нужно дать этой функции дополнительный параметр site_id
, так что загружаются только соответствующие права сайта, а не той другой стороны.Как я могу это сделать?
модели /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
1 ответ
Это инициализируется с использованием метода current_ability. Так что вам нужно переписать этот помощник в application_controller следующим образом
class ApplicationController < ActionController::Base
#...
private
def current_ability
@current_ability ||= Ability.new(current_user, request. original_url)
end
end