2010-12-10 57 views
0

我开始讨论Rails &有几个高级问题,通常围绕用户,他们的卷以及如何构建或布局新的Rails应用程序。我真的只是寻找不同的想法(或对我未尝试过的未受过教育的猜测进行验证)和他们的利弊&缺点。Rails:使用会话,Cookies或命名空间划分用户,管理员等

一个新的项目将有用户管理员和,让我们给他们打电话,利益相关者

这些显然都是人,每个人都需要登录,并且会有不同的“滚动”。我知道有很多方法可以解决这个问题,但我正在寻找“Rails”方式来尽可能多地利用所谓的“Convention Over Configuration”。

  • 管理员拥有超能力,可以看到&去任何地方
  • 利益相关者只能更改自己的网站的区域
  • 用户(也许有一个更好的名字,因为所有角色在某种意义上, '用户')只能查看由利益相关者创建的内容 ,并且 可以对其进行选择性评论。

所以,如何处理好这个...

登录:使用一个登录表单,然后分配不同的卷?或发送用户到一个登录和管理员,到另一个等...?优点缺点?我想维护一个用户类比分裂它们更容易......但安全性呢?

路线:

  • 为了避免嵌套路由(其中许多建议反对),我想利益相关者只看到自己的“赌注”。所以当他们登录时,他们会立即看到他们的小区域。想知道如果不是/ stakeholder/stakeholder_id /赌注/新的,也许我可能只是/赌注/新的。这是如何处理的?在用户?在会议中?曲奇饼?

  • 那么管理员呢?我见过这个卷的例子移动到它自己的“命名空间”(我认为?)其中所有管理任务都预先添加/ admin/...这是常见的吗?或者,还有更好的方法?

  • 而且,最后,在更高的卷(adminstakeholder)想“共享”的视图或控制器,或任何为此事代码,由一个较小的卷(user)使用,会发生什么?如果admin拥有自己的控制器,则admin/下的型号为&,那么使用/stake/new还是我们还需要维护/admin/stake/new

对不起,我的困惑&详细。任何帮助,或例子/文件,将不胜感激...

+2

建议您在railscasts.com上搜索授权。一旦您查看了许多授权库,就可以轻松解决一些基本问题。祝你好运。 – aceofspades 2010-12-10 20:58:17

+0

我知道授权是自行开发的还是** authlogic **或** devise **等等......我*不知道的是它们如何与应用程序本身的结构相关联。现在,我还没有*使用*一个,但是,当我阅读每个人的文档时,这可能会变得很清楚?或者可能是所有人使用的“标准”总体方法(Rails的方式),我想这就是我所问的... – Meltemi 2010-12-10 21:08:22

+0

与他们一起玩,就像全面的建议。一旦你做到了,它会变得更清晰。对于诸如利益相关者之类的东西,仅仅将查询范围限制在当前登录的利益相关者中是很简单的。即只需致电@ current_stakeholder.stakes.new等。 – Doon 2010-12-10 21:19:06

回答

0

有没有“标准”的方式来处理红宝石轨道上的认证和授权。通常我发现基于宝石的解决方案是最好的选择。就我个人而言,我使用Devise和CanCan(在github上托管,谷歌搜索将把它变成)。请参阅上面的fullware建议的railscasts.com,以获取有关实施的一些很好的示例。

要你的问题:

  • 惨惨处理授权(允许用户做什么),其中作为制定(或authlogic)处理身份验证。
  • 处理角色最简单的方法是为用户表添加一个布尔列,以便为每个要定义的角色添加一个布尔列,所以在上面的示例中,将为管理员,用户和利益相关者设置布尔值。当你创建你的用户时,你需要自动将用户字段设置为true(这可以在用户模型中使用before_save过滤器来完成)。然后,当您需要授予用户权限时,只需将该角色设置为true即可。
  • 一旦你有了这个设置,配置CanCan可以根据这些字段进行限制(请参阅CanCan文档或railscasts.com了解如何执行此操作)。
  • 安全性:你提到分裂管理和用户功能和登录。对于Web开发人员来说,这是一个公开的争论,有些人喜欢做内联管理(添加选项只出现在“公共”视图中),而其他人则更喜欢使用不同凭证的完全独立的管理界面。答案真的取决于你的应用程序的需求。从安全角度来看,具有独立管理界面和自己的证书并位于单独的子域(即admin.yoursite.com)更安全,因为XSS更困难(更多信息@指南上的安全指南-DOT-RubyOnRails- DOT-ORG)
  • RE:利益相关者“主页”我不是100%清楚stakes是否是嵌套资源或其他东西。如果它是一个嵌套的资源,一个选项可能是使用:浅路由选项(请参见:http://ryandaigle.com/articles/2008/9/7/what-s-new-in-edge-rails-shallow-routes
  • 您最后一点是最棘手的,即时通讯不清楚您的意思是与用户共享代码,但答案可能是让你的权限系统(管理员,利益相关者,用户)更高级,并将权限链接到更多的操作上,比如创建或查看某些内容的权限。这将允许你细粒度的控制。有很多角色管理插件(尝试谷歌这些)可能会为您提供这个。

对不起,不发布更多的链接,作为一个新用户,我不能张贴多个显然。

希望这会有所帮助。