[英]Voting in voter controller for multiple models passing polymorphic/duck typed object variable
[英]Duck Typed Cancan scenario
這是我的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
結束
我的意圖是關鍵域類[User,Round,Participant,Question和Program]都定義了own_by ?, managed_by? 和一個visible_to? 方法。 並且統一應用允許更新或查看其中一個的規則。
但我相信這樣的陳述:
can :update, :all do |clazz|
clazz.owned_by? user
end
沒有做我的想法,因為我不認為我甚至到了clazz.owned_by? 線。
有人能把我拉直嗎? 我查看了文檔,無法將我所說的技術與我正在使用的技術聯系起來。 謝謝!
我相信:所有只是一個符號而不是所有類的迭代器。 您可以像我在這里一樣明確地列出它們,也可以使用此解決方案獲取所有型號的列表: https : //stackoverflow.com/a/516605/2033014
[User, Round, Participant, Question, Program].each do |klass|
can :update, klass, klass.owned_by?(user)
can :read, klass, klass.visible_to?(user)
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.