我有一个多租户rails 3应用程序。我正在使用共享数据库方法(所有范围都是tenant_id)。
我可以想到设计应用程序控制器路由的3种不同方法:
1)为每个租户设置basecamp样式子域 例如,customer1.myapp.com / project,customer2.myapp.com / project
2)使用租户标识符限定每条路由 例如,myapp.com/customer1/projects,myapp.com/customer2/projects
3)让路由对多租户透明。 Tenant_id是通过当前登录的用户(for.e.g before_filter in application controller)获得的,假设@user对象具有tenant_id属性。 例如myapp.com/projects
我的问题是:
A)从安全性,易于开发,代码可扩展性和最终用户角度这些方法中是否有任何优点或缺点?或者它纯粹是开发者风格的问题?
B)使用#1,是否可以拥有一个通用的登录URL(例如,login.myapp.com),在成功验证后将用户转发到customer1.myapp.com?是否存在跨子域共享会话cookie的问题?