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

时间:2015-12-04 10:56:25

标签: ruby-on-rails ruby-on-rails-4 devise cancancan rolify

我有一个Rails-Application,它服务于不同的站点。 E.g。

  • www.example1.com
  • www.example2.com

这些网站存储在Site模型中。我还使用DeviseRolifycancancan

设置了用户角色系统

现在,一个用户可以在不同的网站上拥有不同的角色。例如,他可以是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 个答案:

答案 0 :(得分:1)

使用current_ability方法初始化。所以你需要在application_controller中覆盖那个帮助器,如此

public function totalBudgeting()
{
     return $this->hasMany('App\Budgeting', 'id_event', 'id')->select(['total','item']);
}