这是我的能力。初始化:
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] 都定义了 own_by?、managed_by? 和一个可见的?方法。并且统一应用允许更新或查看其中之一的规则。
但我相信这样的陈述:
can :update, :all do |clazz|
clazz.owned_by? user
end
没有按照我的想法做,因为我认为我什至没有到达 clazz.owned_by?线。
有人可以纠正我吗?我查看了文档,无法真正将它所说的内容与我正在使用的技术联系起来。谢谢你!