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

时间:2010-02-05 08:47:10

标签: ruby-on-rails authorization

我正在尝试根据用户的偏好找出隐藏用户个人资料中某些字段的最佳方法。到目前为止,我正在使用布尔字段和if,then语句。

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

我想知道我是否可以使用declarative_authorization或其他一些更干的更好的方法。我更喜欢if if @ user.role ==“admin”show all,如果@ user.role ==“regular”只显示非隐藏字段。等

由于

2 个答案:

答案 0 :(得分:1)

您是否考虑过使用辅助功能?在你的情况下,我会在app / helpers / 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) %>

最好的问候。

答案 1 :(得分:0)

有人因为没有正确阅读文档而打我的头...它就在我的面前。

你使用has_role?助手由d_a

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

我相信它会自动传递给current_user。因此,如果current_user具有角色管理员,则它会显示所有内容。