2009-06-03 85 views
4

我認爲答案是管理員登錄,然後檢查用戶是否有管理員標誌,但我也想到了一些其他相關問題。什麼是安全地添加管理訪問到我的rails網站的最佳方式是什麼?

與非管理員在同一個用戶表中擁有管理標誌(attr_protected)是否更好?或者我應該有一個管理員用戶表?

我應該爲管理員用戶創建一個單獨的rails應用程序嗎?這可能是過度的,因爲他們都必須訪問相同的數據庫(更不用說它可能是一個巨大的痛苦)。

其他建議?現在我只需要確保一兩頁,因此我甚至將HTTP基本或摘要身份驗證視爲臨時措施(受保護的內容實際上不是私有的/重要的)。但是......我不知道如何爲特定操作實現HTTP認證,我只看到了如何實現它以防止目錄訪問。

任何方向和討論都會很棒。我確信其他堆棧溢出用戶將從這個討論中受益。

謝謝!

回答

2

我爲此使用了restful_authentication plugin。限制對任何控制器或任何方法的訪問是非常簡單的。在例如在控制器添加此功能:

private 
def authorized? 
    user.admin? 
end 

private 
def authorized? 
    user.admin? if update? || create? 
end 

我定義的管理?方法在我的用戶模型中。我也創建了更新?並創建?檢查哪個操作被調用的方法。在restful_authentication授權?方法總是在訪問控制器時運行。

我會把所有東西放在一個應用程序和一張表中(不要創建用戶和管理表)。您可以通過允許爲現有管理員用戶設置此值來確保用戶控制器中的管理員標誌。

2

我認爲這取決於給藥方式。

如果您的管理員對該網站的看法與普通用戶相同,但具有額外的權限,我將使用管理員標誌。 (或者,隨着您的需求擴大,一個完整的角色表。)這種情況下,每個人都看到相同的東西,但管理員可以訪問普通用戶不需要的各種操作(刪除,編輯,禁止等)。

如果您的管理員需要的視圖與普通網站大不相同,我會推薦一個完全獨立的Rails應用程序來訪問相同的數據庫。例如,如果您的「管理員」真的是服務檯員工將要接聽電話或處理結算問題,他們可能會有完全不同的數據庫視圖(以及編輯數據的方式)常規應用程序。

擁有多個站點的缺點是可能讓模型(驗證,關聯等)不同步。擁有單一網站的缺點是,您最終可能會在以前易於理解的網站部分插入各種醜陋的「if-admin」代碼。哪個問題更容易處理取決於您的要求。

+0

如果你把所有的管理員的東西放到管理員名字空間中,你不需要在你的代碼中添加任何「if-admin」,你就可以獲得一組模型,一個應用程序(在服務器上使用較少的資源)等。 – klew 2009-06-03 21:13:06

相關問題