是否可以使用声明性授权来隐藏/显示某些字段?

问题描述:

我试图找出最好的方法来隐藏用户配置文件中的某些字段根据用户的喜好。到目前为止,我正在使用布尔型字段和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

你有没有考虑过使用辅助函数?在你的情况,我会做这样的事情在应用程序/佣工/ 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

有人打我的头不正确读取的文档...这是就在我的面前。

您使用has_role?帮手由d_a提供

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

我相信它会自动在current_user中传递。所以如果current_user具有角色admin,它将显示所有内容。