2

我正在構建一個rails應用程序,其中登錄是可選的。換句話說,許多相同的動作/視圖/控制器/頁面將工作登錄或註銷。如果您已登錄,您只需獲得更多功能(就像應用程序記住您所做的一樣)。如何處理在軌道上的可選登錄

我目前正在使用restful_authentication和role_requirement,並想知道使用哪個級別。我可以添加一個新的角色「用戶」,例如,所有登錄用戶可以得到,然後require_role "user"和查看塊使用@user.has_role? ...或者我可以改善事物的身份驗證方面,並進行檢查,看看用戶是認證。或者我可以做其他事情。有沒有任何標準的方式來處理這在軌道?

回答

1

您可以將認證寶石與授權寶石集成在一起。首先,我會推薦cancan,因爲它非常簡單直接。

如果您使用的是cancan,您可以定義model/ability.rb中的用戶可以/不可以做什麼。

class Ability 
    include CanCan::Ability 

    def initialize(user) 
     if user.admin? 
     can :manage, :all 
     else 
     can :read, :all 
     end 
    end 
end 

然後在您的視圖中,可以授權基於用戶角色的特點:

<% if can? :update, @article %> 
    <%= link_to "Edit", edit_article_path(@article) %> 
<% end %> 

如果你正在尋找更多的權力,你可能要考慮其他授權寶石如declarative_authorization

0

無需檢查允許所有用戶執行的操作的授權。

如果你在你的ApplicationController一個默認的授權,如:

before_filter :authorize

然後要麼刪除完全,並重新添加它僅適用於那些需要授權的行動,或者在每個控制器

skip_before_filter :authorize, :only => [:action_method_name]

你應該在你的ApplicationController一個簡單的方法,你可以在角色傳遞並得到一個:你可以用禁用如果當前用戶被授權,則返回true:

def authorized? role 
    return true if current_user.roles.collect{|r| r.name.to_sym}.include(role.to_sym) 
    false 
end 

然後,您可以通過程序檢查您的操作中所需的任何角色。

+0

我也想某些頁面顯示不同的意見,如果用戶登錄與未登錄。對此的任何意見? – 2010-09-01 21:23:39