Rails 用户角色系统 - 同一用户在不同站点上具有多个权限

Rails user-role system - Same user with multiple Rights on different sites

我有一个 Rails-应用程序,它服务于不同的站点。例如

这些站点存储在 Site 模型中。我还设置了一个用户角色系统,使用 DeviseRolifycancancan

现在一个用户可以在不同的网站上拥有不同的角色。例如,他可以是 www.example1.com 上的管理员,但在 www.example2.com

上只能是普通用户

我正在能力模型中加载用户权限。 现在我的问题是:这个 "initialize" 函数在哪里调用? 我需要给这个函数一个额外的参数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

这是使用 current_ability 方法初始化的。所以你需要像这样

覆盖application_controller中的那个助手
class ApplicationController < ActionController::Base
  #...

  private

  def current_ability
    @current_ability ||= Ability.new(current_user, request. original_url)
  end
end