我正在使用CanCanCan gem进行Rails 4.2应用程序。我有自己的能力.rb课程。我正在进行单独的角色模型,如gem文档和角色继承中所解释的那样。
/usr/bin/google-chrome
基本上每个角色都是一个在user.role.each块中调用的方法。我完全不明白它的作用。我需要的是能够在def客户端示例中访问角色方法中的用户变量。使用户全球化成为一种解决方案或者有什么好的解决方案吗?
答案 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

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