将Rails Web应用程序的公共端看作另一个域

时间:2011-09-04 00:36:53

标签: ruby-on-rails web

假设我有一个预约安排网络应用程序,并且Web应用程序的某些部分是公开的,供所有人查看,例如员工或请求预约页面。但我希望这些部分在客户端域中可见。域名设置应该如何调整?

1 个答案:

答案 0 :(得分:1)

你可以在这里说几件事。如果您有一个具有应用程序的公共和私有方面的约会安排应用程序,则可以在Rails中使用访问控制。例如,员工角色中的人员将填写/管理/查看约会,但客户/客户只能请求约会。这非常简单,与(DNS)域没有任何关系(顺便说一句,域名可能意味着许多事情,因此您需要说DNS域或安全域或问题域)。

您可以使用身份验证gem(Devise,Authlogic,Sorcery)来识别系统用户(他们使用密码登录等)。在确定某人之后,他们可以被授权(或拒绝)该网站的功能(使用像CanCan这样的宝石)。为您的员工提供称为员工的角色。将员工定义为能够管理所有约会,但客户只能阅读和创建约会。

http://asciicasts.com/episodes/192-authorization-with-cancan

如果您尝试使用DNS域以这种方式拆分网站,那么这不是一个好方法。但是,如果您确实已经完成了所有这些授权和身份验证并且正在提出DNS问题,那么让我们考虑一下。

你正试图让/ public成为www.bizcorp.com,应用程序的其余部分是whatterrible.heroku.com?这很棘手,因为rails应用程序捆绑/公共,你需要一种方法来分裂两个基于某些东西。您可以在rails 3中执行此操作,但是您将在routes.rb中拆分给定的REST资源,该资源实际上是在两个域(约会)之间共享的。所以现在我的约会控制员无法处理所有约会。我必须根据域名匹配进行路由。因此,您需要弄清楚在域上拆分是否真的是明智之举,或者您需要将PublicAppointments控制器和正在破坏DRY的StaffAppointments控制器混合在一起。

此处有关于如何为子域和顶级域进行routes.rb匹配的更多信息: http://asciicasts.com/episodes/221-subdomains-in-rails-3

我会去授权路线并将整个网站放在客户的域名上。角色处理公共和私有功能,我的URL不必在任何地方进行更改。如果我在一个疯狂的虚拟托管环境或一些奇怪的网络约束下,我只会使用DNS hackery。

希望这会给你一些想法。