4

我认为答案是管理员登录,然后检查用户是否有管理员标志,但我也想到了一些其他相关的问题。

在与非管理员相同的用户表中拥有管理员标志(attr_protected)会更​​好吗?还是我应该有一个管理员用户表?

我应该为管理员用户创建一个单独的 Rails 应用程序吗?这可能有点矫枉过正,因为他们都必须访问同一个数据库(更不用说设置起来可能会很痛苦)。

还有其他建议吗?现在我只需要保护一两个页面,所以我什至将 HTTP 基本或摘要身份验证作为一种临时措施(受保护的内容实际上并不那么私密/重要)。但是...我不知道如何为特定操作实现 HTTP auth,我只看到了如何实现它以防止目录访问。

任何方向和讨论都会很棒。我相信其他 Stack Overflow 用户将从这次讨论中受益。

谢谢!

4

3 回答 3

5

瑞安·贝茨(Ryan Bates)有关于这个主题的三部分系列 Railscasts,应该会给你一些思考的食物:

还有三种关于不同身份验证技术的 Railscast:

于 2009-06-03T21:05:41.927 回答
2

为此,我正在使用restful_authentication 插件。限制对任何控制器或任何方法的访问非常简单。在控制器中的示例中添加此功能:

private
def authorized?
  user.admin?
end

或者

private
def authorized?
  user.admin? if update? || create?
end

我定义了管理员?我的用户模型中的方法。我也创建了更新?并创造?检查调用了哪个操作的方法。在restful_authentication 中授权?访问控制器时始终运行方法。

我会将所有内容放在一个应用程序和一张表中(不要创建用户和管理表)。您可以通过仅允许为现有管理员用户设置此值来保护用户控制器中的管理员标志。

于 2009-06-03T21:05:21.350 回答
2

我认为这取决于管理的类型。

如果您的管理员对该站点的视图与普通用户的视图相同,但具有额外的权限,我会使用管理员标志。(或者,随着您的需求的扩大,一个完整的角色表。)在这种情况下,每个人都看到相同的内容,但管理员可以访问普通用户无法访问的各种操作(删除?编辑?禁止?等)。

如果您的管理员需要的视图与普通站点完全不同,我会推荐一个完全独立的 Rails 应用程序来访问相同的数据库。例如,如果您的“管理员”确实是要接听电话或处理帐单问题的服务台员工,那么他们可能对数据库有完全不同的视图(可能还有编辑数据的方法),而这些视图在常规应用。

拥有多个站点的缺点是模型(验证、关联等)可能不同步。拥有单个站点的缺点是,您最终可能会在站点以前易于理解的部分中插入各种丑陋的“if-admin”代码。哪个问题更容易处理取决于您的要求。

于 2009-06-03T21:07:25.403 回答