Rails方式-命名空间
时间:2020-03-06 14:34:51 来源:igfitidea点击:
我有一个关于如何做" The Rails Way"的问题。对于具有面向公众的一面和一个管理界面的应用程序,Rails社区中关于如何做到这一点的普遍共识是什么?
命名空间,子域还是完全放弃?
解决方案
在某些较小的应用程序中,我认为我们不需要分开管理界面。只需使用常规界面并为登录用户添加管理功能。
在较大的项目中,我将使用名称空间。出于某种原因,使用子域对我来说不合适。
管理界面并没有真正的"推销方式",实际上,我们可以在许多应用程序中找到每种可能的解决方案。 DHH暗示他更喜欢名称空间(具有HTTP Basic身份验证),但这仅是一个简单的含义,而不是正式的Rails意见之一。
也就是说,最近我发现该方法取得了很好的成功(命名空间+ HTTP Basic)。看起来像这样:
routes.rb:
map.namespace :admin do |admin| admin.resources :users admin.resources :posts end
admin / users_controller.rb:
class Admin::UsersController < ApplicationController before_filter :admin_required # ... end
application.rb
class ApplicationController < ActionController::Base # ... protected def admin_required authenticate_or_request_with_http_basic do |user_name, password| user_name == 'admin' && password == 's3cr3t' end if RAILS_ENV == 'production' || params[:admin_http] end end
authenticate_or_request_with_http_basic上的条件会在生产模式下或者向任何URL添加?admin_http = true
时触发HTTP Basic身份验证,因此我们可以在功能测试中进行测试,并在浏览开发站点时手动更新URL。
我问了一个类似的问题。后端管理。答案之一提到了名称空间,这就是我实现的。
感谢所有回答我的问题的人。似乎共识是,如果我们愿意,请使用名称空间,因为没有DHH赞助的Rails Way方法。 :)
再次感谢大家!