你可以設定,讓用戶有polymorphic association到任何一個學校,一個部門或一個區域。如果此關聯爲零,則表示用戶可以訪問所有內容(您提到的國家級別)。
class User < ActiveRecord::Base
belongs_to :administrates, :polymorphic => true
end
class School < ActiveRecord::Base
belongs_to :branch
has_many :users, :as => :administrates
end
class Branch < ActiveRecord::Base
belongs_to :region
has_many :schools
has_many :users, :as => :administrates
end
class Region < ActiveRecord::Base
has_many :branches
has_many :users, :as => :administrates
end
您不能使其對Active Admin完全透明,因爲您必須告訴Active Admin使用特定範圍。爲此,您應該可以在ActiveAdmin.register
區塊內獲得scope_to
。你必須做一個小魔術,使scope_to
工作,多態關聯,但它是可行的:
ActiveAdmin.register School do
scope_to do
Class.new do
def self.schools
case current_user.administrates
when School
School.where(:id => current_user.administrates_id)
when Branch
School.where(:branch_id => current_user.administrates_id)
when Region
School.where(:branch_id => current_user.administrates.branches.map(&:id))
when NilClass
School.scoped
end
end
end
end
end
這基本上意味着,每一次活動管理員會加載一所學校(或學校的索引頁上的列表) ,它將通過我們在scope_to
塊內創建的匿名類進行範圍。
根據您的要求,您應該能夠在Branch
和Region
型號上實現類似的功能。
但是,您應該知道,當使用scope_to
時,當前存在an open issue,關於顯示當前用戶範圍之外的資源的過濾器和表單。
您還需要授權才能限制某個級別的用戶只能看到該級別及以下的級別(例如,分支級別的用戶不應訪問區域)。爲此,您應該使用CanCan。
有關如何在Active Admin中集成CanCan的信息,請參閱this或this。
我對管理框架的經驗是,它們不適合普通的網站用戶。然而,我沒有ActiveAdmin的經驗,所以我不能評論它。不過看起來不錯,我會試一試我的下一個項目。 –
它看起來很酷,不是嗎?我已經有了RailsAdmin來啓動和運行,但是我將退休並從頭開始管理自己的管理員 - 試圖弄清楚ActiveAdmin是否足夠靈活以便成爲一個好的基礎。 – Jerome
Gotcha ;-)讓我們知道你在找什麼 –