2009-08-07 83 views
0

我的應用程序有用戶部分和/管理部分。有2個模型帳戶(如客戶)和管理員,我應該分別驗證帳戶和管理員。管理員不應該訪問帳戶的部分,帳戶不應該訪問管理區域。有沒有針對我的解決方案,或者我應該爲用戶和管理員編寫2個不同的應用程序,然後等待merb 1.1並以某種方式將它們安裝到1個應用程序中?有任何想法嗎?Merb認證問題

回答

1

你的問題對我來說似乎很有意思,我在開始的時候遇到了同樣的問題。所以,我可以建議不同的解決方案,您可以從中選擇一個取決於您的應用程序結構。

  1. 如果所有用戶都屬於一類,但有特殊領域(如UserClass的=(:客戶端:主持人:管理等),您`ll有應用程序的修改最小,只是檢查用戶類我認爲這不是一個好主意

  2. 最佳實踐 - 使用Merb身份驗證策略它是一個非常靈活的機制,所以你可以選擇你想要的類。

例如,你將有2個基本策略:C lientAuth,AdminAuth。他們都將使用不同的用戶類(客戶端,管理員)。所有你需要 - 創建自定義策略文件,然後將其連接到路由器這樣的:

authenticate(ClientAuth) do 
    match('/profile').to(:controller => ProfileController) 
end 

authenticate(AdminAuth) do 
    match('/admin').to(:controller => AdminController) 
end 

或者,您也可以控制器中使用驗證:

class AdminController 
    :before ensure_authenticated, :with => [AdminAuth] 

    def index 
    ... your stuff ... 
    end 
end 

而且,你甚至可以只用一個控制器對於同時使用的策略是這樣兩類認證:

class AdminController 
    :before ensure_authenticated, :with => [AdminAuth, ClientAuth] 
end 

只是因爲你有你的戰略,你的無線設置不同的認證等級(管理員,客戶端)就可以得到有關它的信息:session.user.class(這是找出對象的類名稱的基本方法紅寶石)

下面是一些有用的鏈接:

  1. http://www.slideshare.net/hassox/merb-auth-presentation
  2. http://merbunity.com/tutorials/19
  3. http://www.slideshare.net/carllerche/merb-pluming-the-router-presentation
  4. http://merbivore.com/documentation/1.0/doc/rdoc/merb-auth-core-1.0/index.html?a=C00000025&name=Strategy