【问题标题】:Rails: Demarcating Users, Admins, etc. with Sessions, Cookies or NamespacesRails:使用会话、Cookie 或命名空间划分用户、管理员等
【发布时间】:2011-05-23 17:26:25
【问题描述】:

我正在研究 Rails,并有一些高级问题,这些问题通常围绕用户、他们的工作以及如何构建或布局新的 Rails 应用程序。我真的只是在寻找不同的想法(或对我在下面尝试过的未受教育的猜测的验证)及其优缺点。

一个新项目将拥有用户管理员,我们称他们为利益相关者

显然,每个人都是人,每个人都需要登录,并且会有不同的“点名”。我知道有很多方法可以解决这个问题,但我正在寻找“Rails”方法来尽可能多地利用所谓的“约定优于配置”。

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

那么,如何处理...

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

路线:

  • 为了避免嵌套路由(许多人建议不要这样做),我希望利益相关者只看到他们自己的“赌注”。因此,当他们登录时,他们会立即看到他们的小区域。想知道如果不是 /stakeholders/stakeholder_id/stakes/new 也许我可以只拥有 /stakes/new。这是如何处理的?在用户?在会议中?曲奇饼?

  • 那么管理员呢?我已经看到此卷的示例移至其自己的“命名空间”(我认为?),其中所有管理任务都以 /admin/ 开头...这很常见吗?还是有更好的方法?

  • 最后,当一个较高的人(adminstakeholder)想要“共享”一个视图或控制器,或任何代码时会发生什么,使用通过较小的滚动(user)?如果adminadmin/ 下有自己的控制器、模型和视图,那么使用/stake/new 是否合适,还是我们还需要维护/admin/stake/new

对不起,我的困惑和冗长。任何帮助或示例/文档将不胜感激...

【问题讨论】:

  • 推荐你在railscasts.com上搜索授权,一。一旦您查看了许多授权库,您就会问一些很容易解决的基本问题。祝你好运。
  • 我知道授权是本土或 authlogicdevise 等......我是 不是 i> 了解它们与应用程序本身结构的关系。现在,我还没有使用一个,所以当我阅读每个人的文档时,这可能会变得清晰吗?或者也许所有人都使用了一种“标准”的整体方法(Rails 方式),我想这就是我要问的......
  • 按照完整软件的建议与它们一起玩。一旦你这样做,它会变得更加清晰。对于像利益相关者这样的东西,将查询范围仅限于当前登录的利益相关者是非常简单的。即只需调用@current_stakeholder.stakes.new 等。

标签: ruby-on-rails session cookies namespaces


【解决方案1】:

在 ruby​​ on rails 中没有“标准”方式来处理身份验证和授权。通常我发现基于 gem 的解决方案是最好的方法。我个人使用 Devise 和 CanCan(托管在 github,谷歌搜索会打开它)。请参阅上面 fullware 建议的 railscasts.com 以获得一些很好的实施示例。

给你的问题:

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

很抱歉没有发布更多链接,作为一个新用户,我显然不能发布多个链接。

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-18
    • 2015-01-13
    • 2020-11-03
    • 2011-11-03
    相关资源
    最近更新 更多