我有几个组织使用的应用程序,我想检查一个域(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场景。你怎么看?我离开基地了吗?提前谢谢。
答案 0 :(得分:0)
我建议使用lockdown gem进行授权。 (见http://stonean.com/)
第二个实际上更清洁。
答案 1 :(得分:0)
答案 2 :(得分:0)
您不应在视图中放置逻辑。在控制器中而不是在视图中使用逻辑实际上会使您的测试更容易......
答案 3 :(得分:0)
我建议before_filter
和acl9。还使用presenters从视图中获取代码并将其转换为可测试的ruby对象