Rails - слишком много логики во взглядах? - PullRequest
0 голосов
/ 18 ноября 2009

У меня есть приложение, используемое несколькими организациями, и я хочу проверить, что пользователи одного домена (a.domain.com) не могут редактировать пользователей другого домена (b.domain.com). У меня вопрос, где поставить логику, перед фильтром или в представлении?

Вид:

<% if @user.websites.detect {|website| website.url == request.host} %>
  render :partial => 'form'
<% else %>
  render :partial => 'no_access'
<% end %>

Или в контроллере:

before_filter :verify_editable_user, :only => ['edit', 'update', 'delete']
protected
def verify_editable_user
  @user = User.find(params[:id], :include => 'websites')
  unless @user.websites.detect {|website| website.url == request.host}
    render 'no_access'
  end
end

В этом сценарии первая версия кажется мне чище. Тем не менее, второй кажется больше по сценарию MVC Как вы думаете? Я далеко от базы? Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 18 ноября 2009

Я бы порекомендовал before_filter и acl9 . Также используя Presenters , чтобы получить код из ваших представлений и в тестируемый объект ruby ​​

0 голосов
/ 18 ноября 2009

Пара других драгоценных камней авторизации для проверки будет CanCan и acl9 .

0 голосов
/ 18 ноября 2009

Вы не должны размещать логику в своих взглядах. Наличие логики в контроллерах, а не в представлениях, фактически сделает ваше тестирование проще ...

0 голосов
/ 18 ноября 2009

Я рекомендую использовать гем блокировки для авторизации. (см. http://stonean.com/)

Второй на самом деле намного чище.

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