2009-11-18 6 views
0

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

Вид:

<% 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. Как вы думаете? Я так далеко от базы? Заранее спасибо.

ответ

0

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

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

0

Еще одна лицензия на выдачу разрешения на регистрацию будет CanCan и acl9.

0

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

0

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

Смежные вопросы