簡體   English   中英

Duck Type Cancan場景

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM