具有哈希条件的cancancan中的角色继承

时间:2016-01-30 18:01:36

标签: ruby-on-rails ruby cancancan

我正在使用CanCanCan gem进行Rails 4.2应用程序。我有自己的能力.rb课程。我正在进行单独的角色模型,如gem文档和角色继承中所解释的那样。

/usr/bin/google-chrome

基本上每个角色都是一个在user.role.each块中调用的方法。我完全不明白它的作用。我需要的是能够在def客户端示例中访问角色方法中的用户变量。使用户全球化成为一种解决方案或者有什么好的解决方案吗?

2 个答案:

答案 0 :(得分:0)

最简单的方式......

#app/models/ability.rb
class Ability
  include CanCan::Ability

  def initialize(user)
      user ||= User.new # guest user (not logged in)
      if user.role == "client"
         can :manage, Client, :id => user.id
         can [:read,:create], Patient
      elsif user.role == "x"
         ...
      end    
  end
end

你可以read more here

答案 1 :(得分:0)

好的,我这样解决了我的问题。我添加了user作为参数发送:



user.roles.each { |role| send(role.name.downcase, user) }




并添加了方法:



#ability.rb
def any_patient?(client, id)
    client.patients.any? {|p| p.id == id }
end




然后我这样做:



def client(user)
    can [:read], Patient do |patient|
      any_patient?(user.client, patient.id)
    end

  end




所以我告诉客户可以阅读他所拥有的任何病人。