場景:我的rails系統中有幾個ActiveRecord模型,都需要通過訪問控制列表進行控制。我有一個很好的ACL實現,可以實現我想要的功能,但是現在,檢查訪問調用都在每個受控對象類型(文檔,用戶等)中都被複制。在ruby中調用混合模塊中的類方法
我的直覺是將共享代碼放入模塊中,並將其與mixin結合使用。我不確定這是可能的(或者正確的語法是什麼),因爲混合模塊已經調用了ActiveRecord :: Base方法 - 有scope和has_many定義。
的想什麼,我要完成的例子是在這裏:
class Document < ActiveRecord::Base
include Controlled
end
module Controlled
has_many :acls, as: :controlled
scope :accessible, ->(uid, level){where("BUNCH OF SQL HERE")}
def access_convenience_methods
#stuff to provide easy access to authorization checks
end
end
然後,我不得不從的ActiveRecord :: Base的包括控制得到一些其他的車型。
模塊中的has_many和scope調用正在引起心痛 - 我無法從混合模塊中調用它們,顯然此上下文無法訪問外部類方法。
歡迎任何建議。