2016-02-15 89 views
0

我有要求在其中一個應用程序使用活動管理員作爲管理面板,我用設計的身份驗證目的。權限管理沒有使用康康或rolify活動管理

現在我們有三種類型的用戶,super_admin admin和普通用戶。超級管理員和管理員將具有不同的功能,我們應該使用相同的活動管理界面。

在這裏的問題是因爲色器件不會允許兩個模型,如

devise_for:管理員,ActiveAdmin :: Devise.config

devise_for:超級管理員,ActiveAdmin :: Devise.config

我們不能在路由中使用兩者來區分路由中的用戶類型,因爲我們不使用角色管理系統(如cancan),而是使用用戶中的類型字段,所以我們無法在活動管理員中限定用戶類型。

所以任何一個可以請幫我找到使用主動管理兩種類型的管理員(超級管理員和管理員)的方式。通過使用類型而不使用角色管理。

謝謝。

回答

1

雖然它可能是可能的,但你真的只是通過將授權推入認證層而造成巨大的混亂。

它將使你的設計建立真正cringeworthy,如果你還需要安裝一個授權層,自己如:

(current_super_admin || current_admin).is_a?(SuperAdmin) # yuck 

你有很大的過於複雜的驗證層和一個蹩腳的homerolled授權系統結束。兩者都是災難的祕訣。

它也比不太理想,如果你需要能夠授予/因爲你需要從一個表導入用戶數據到另一個也是用戶可能有任何關係,廢除權限。

如果你想要做的廉價的角色,你可以簡單地使用ENUM列:

rails g migration add_role_to_user role:integer:index 

class User 
    enum role: [:peasant, :admin, :super_admin] 
end 
+0

感謝您的答覆最大。其實我正在嘗試使用「type」列名,所以如果我想爲Admin或SuperAdmin創建任何自定義方法,或者需要根據usertype來創建範圍,那麼訪問起來會很容易。所以請讓我知道,如果我能做到這一點。 – sravan44

+0

在重新發明車輪之前,我會真正關注CanCanCan或Pundit。兩者都有基於權限的範圍。此外,如果您嘗試將所有授權邏輯加入您的Admin或SuperAdmin類中,您最終將獲得一個遠遠超過周圍應用程序的上帝級別。 – max

+0

由於ActiveRecord使用多態性,'type'也不是一個列的好名字。 – max