我正在为不同的用户类型创建子域名,并且想知道这样做的好习惯是什么。我有用户类型admin
,editor
和grader
及其子域名admin.somesite.com
,editor.somesite.com
和grader.somesite.com
。
我遇到的问题是如何建模控制器操作和某些用户类型之间的连接。如果我对子域admin
的root有以下内容:
match '/' => 'supers#main_site', :constraints => { :subdomain => 'admin' }
我有Article
的模型,可以editor
和admin
进行修改。我已在edit
内实施ArticlesController
操作验证,该操作会检查登录用户是editor
还是admin
。如果没有,我将他转移到错误网站。
我的问题是,我是否需要以某种方式限制文章编辑到这样的特定域:
match '/articles/:id/edit' => 'articles#edit', :constraints => { :subdomain => 'admin' }
match '/articles/:id/edit' => 'articles#edit', :constraints => { :subdomain => 'editor' }
或者只是导航到文章编辑就足够了,而我已经在该域内导航了?因此,如果editor
已登录其域editor.somesite.com
并且他点击了主页上的文章,则通常会将他带到editor.somesite.com/articles/:id/edit
,如果admin
执行此操作,他会看到admin.somesite.com/articles/:id/edit
。
多个子域和权限的良好做法是什么?谢谢!
答案 0 :(得分:1)
我不了解最佳做法,但我可以告诉你在类似情况下我做过的一些事情。
如果某个应用程序有子域名,我认为每个子域名都是它自己的应用程序。为方便起见,他们可能共享相同的Rails项目并可以访问相同的模型和资产。但是,我的心态是它们是独立的应用程序,它们影响了以下决策。
我最终分割了我的路线。您可以使用constraints
方法按用户类型对资源进行分组。例如:
constraints subdomain: 'admin' do
# All the admin routes
end
constraints subdomain: 'editor' do
# All the editor routes
end
这使得确定谁有权访问内容非常简单,并且因为您不会一遍又一遍地重复, constraints: { subdomain: <role> }
而使每条路线变得不那么复杂。基本上,你正在做的是,&#34;以下是管理应用程序中的路由,这里是编辑器应用程序中的路由。&#34;
我做的另一件事是为每个角色创建特定的控制器。我最初拒绝这一点,认为要弄清楚每个角色与每个动作的关系并不是很困难。然而,在分割出特定于角色的控制器之后,我对每个动作变得多么简单感到震惊。对于许多非常简单的方法,权衡是一些相当复杂的行为。
有些项目特定的规则可能会让我的角色比你的更复杂,但这些是我考虑过的事情。