2010-02-05 64 views
0

我試圖找出最好的方法來隱藏用戶配置文件中的某些字段根據用戶的喜好。到目前爲止,我正在使用布爾型字段和if,then語句。是否可以使用聲明性授權來隱藏/顯示某些字段?

<% if @user.show_email == 'true' -%> 
    <%=h @user.email %> 
<% else -%> 
    hidden 
<% end -%> 

我想知道如果我可以使用declarative_authorization或其他更好的方法是更幹。我更喜歡以@ user.role ==「admin」顯示全部的方式,如果@ user.role ==「regular」只顯示非隱藏字段。等

感謝

+0

您的問題需要重申。在第一部分和代碼中,您表示要查詢「首選項」和「配置文件」以控制可見性,第二部分描述基於安全性的控制。 每個目前非常不同的問題域與可能的解決方案非常不同。 – 2010-02-05 08:53:45

+0

你說得對,它措辭笨拙。使用has_role?結合「如果,然後」偏好選項做我想要的......除了它的一個混亂的地獄,一堆'如果'和'然後'的陳述。 – 2010-02-05 09:07:17

回答

1

你有沒有考慮過使用輔助函數?在你的情況,我會做這樣的事情在應用程序/傭工/ user_helper.rb:

def show_attribute(user, attribute_name) 
    preference = "show_#{attribute_name}" 

    if current_user.has_role?(:admin) or 
    !user.respond_to?(preference) or 
    (user.respond_to?(preference) and user.send(preference)) 

    return user.send(attribute_name) 
    else 
    return "hidden" 
    end 

end 

你可以用它在你的看法是這樣的:

<%=h show_attribute(@user, :email) %> 
    <%=h show_attribute(@user, :address) %> 

最好的問候。

+0

不,我沒有,但那是更多的幹。謝謝。 – 2010-02-05 20:04:27

0

有人打我的頭不正確讀取的文檔...這是就在我的面前。

您使用has_role?幫手由d_a提供

<% if has_role?(:admin) %> 
    show everything 
<% else -%> 
    show nothing 
<% end -%> 

我相信它會自動在current_user中傳遞。所以如果current_user具有角色admin,它將顯示所有內容。

相關問題