0
这里是我的Ability.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
末
我的本意是,关键领域类[用户,圆形,参与者,问题和程序]所有定义owned_by? MANAGED_BY?和一个visible_to?方法。而且允许其中一个更新或查看的规则统一适用。
但我相信,之类的语句:
can :update, :all do |clazz|
clazz.owned_by? user
end
没有做什么,我想是因为我不认为我什至在clazz.owned_by?线。
有人能理顺我吗?我查看了文档,并且无法真正将它所说的内容与我正在使用的技术连接起来。谢谢!
谢谢!问题,可以做的第三个参数是什么? (即klass.visible_to?) – pitosalas
将一个块传递给作用域。在这里找到它:https://github.com/ryanb/cancan/wiki/Defining-Abilities-with-Blocks看看示波器的屏蔽条件 – mathieugagne
很难理解为什么需要第三个(klass.owned_by?),因为在块(第四个参数)再次被问到同样的问题:record.owned_by?用户。你可以解释吗? (我看了链接,但还不十分清楚。) – pitosalas