我想知道它们是否是一种使用 cancan 来根据特定资源的角色定义能力的方式。
现在我有这样的东西,但问题是它会遍历用户每次拥有的每个角色,就像他有 2 倍的 role1 一样,即使它在不同的 Stuff 实例上。
def initialize(user)
@user = user || User.new
@user.roles.map(&:name).each{|name| send(name)}
end
def role1
can :manage, Stuff
end
我该如何优化呢?
我想过类似的事情:
def initialize(user)
@user = user || User.new
can :manage, Object do |object|
roles = @user.roles.where(resource_id: object.id, resource_type: object.class)
unless roles.empty?
roles.map(&:name).each{|name| send(name)}
end
end
end
但它仍然存在将“:管理”操作发送给任何对资源具有任何其他能力的用户的问题......
那么他们有什么方法可以访问 cancan 的初始化函数中的资源实例吗?