这是我的能力.initialize:
user ||= User.new # handle guest user
if user.has_role? :admin
can :manage, :all
elsif user.has_role? :moderator
can :read, :all
can :update, :all do |clazz|
clazz.managed_by? user
end
elsif user.has_role? :participant
can :update, :all do |clazz|
clazz.owned_by? user
end
can :read, :all do |clazz|
clazz.visible_to? user
end
else
raise "Role decoding in Ability fell through"
end
我的意图是关键域类[User、Round、Participant、Question和Program]都定义了一个owned_by?,managed_by?一个visible_to?并且统一应用允许更新或查看其中之一的规则。
但我相信像这样的陈述:
can :update, :all do |clazz|
clazz.owned_by? user
end
你没有做我想做的事情,因为我甚至不认为我能到达clazz.owned_by?线。
接下来我可以尝试什么?我看了看医生,无法真正将它所说的与我使用的技术联系起来。
1条答案
按热度按时间yhuiod9q1#
我相信:all只是一个符号,而不是遍历所有类的迭代器。你可以像我在这里做的那样显式地列出它们,或者使用这个解决方案来获得所有模型的列表:https://stackoverflow.com/a/516605/2033014