Можно ли использовать декларативную авторизацию для скрытия / отображения определенных полей? - PullRequest
0 голосов
/ 05 февраля 2010

Я пытаюсь найти лучший способ скрыть определенные поля в профиле пользователя на основе предпочтений пользователя. Пока что я использую логическое поле и оператор if, then.

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

Мне было интересно, смогу ли я использовать декларативный_авторизацию или какой-нибудь другой лучший метод, более СУХОЙ. Я предпочитаю, чтобы @ user.role == "admin" показывал все, если @ user.role == "обычный" показывал только не скрытые поля. и т.д.

Спасибо

Ответы [ 2 ]

1 голос
/ 05 февраля 2010

Рассматривали ли вы использование вспомогательной функции? В вашем случае я бы сделал что-то подобное в 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) %>

С уважением.

0 голосов
/ 05 февраля 2010

Кто-то ударил меня по голове за то, что я не читал документы должным образом ... это было прямо перед моим лицом.

Вы используете has_role? помощник предоставлен d_a

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

Я полагаю, что он автоматически передается в current_user. Так что, если current_user имеет роль admin, он показывает все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...