我认为答案是管理员登录,然后检查用户是否有管理员标志,但我也想到了其他一些相关问题。
在与非管理员相同的用户表中设置管理标志(attr_protected)是否更好?或者我应该有一个管理员用户表?
我应该为管理员用户创建单独的rails应用程序吗?这可能是过度的,因为他们都必须访问相同的数据库(更不用说设置可能是一个巨大的痛苦)。
还有其他建议吗?现在我只需要保护一两页,所以我甚至将HTTP基本或摘要认证作为一种临时措施(受保护的内容实际上不是私有/重要的)。但是......我不知道如何为特定的操作实现HTTP auth,我只看到了如何实现它以防止目录访问。
任何方向和讨论都会很棒。我相信其他Stack Overflow用户将从这次讨论中受益。
谢谢!
答案 0 :(得分:5)
Ryan Bates在这个主题上有很多关于Railscasts的三部分系列,应该给你一些思考的东西:
还有三种不同身份验证技术的Railscast:
答案 1 :(得分:2)
我正在使用restful_authentication plugin来实现此目的。限制对任何控制器或任何方法的访问都非常简单。在控制器中的示例中添加此功能:
private
def authorized?
user.admin?
end
或
private
def authorized?
user.admin? if update? || create?
end
我定义了管理员?我的用户模型中的方法。我还创建了更新?并创造?检查调用了哪个动作的方法。在restful_authentication中授权?访问控制器时总是运行方法。
我会将所有内容放在一个应用程序和一个表中(不要创建用户和管理表)。您可以通过允许仅为现有管理员用户设置此值来保护用户控制器中的管理标志。
答案 2 :(得分:2)
我认为这取决于管理的类型。
如果您的管理员对该网站的视图与普通用户的视图相同,但具有其他权限,我会使用管理员标记。 (或者,随着您的需求扩展,成熟的角色表。)这是一种每个人都看到相同内容的情况,但管理员可以访问普通用户没有的各种操作(删除?编辑?禁止等等)。
如果您的管理员需要的视图与普通网站完全不同,我建议使用一个完全独立的Rails应用程序来访问同一个数据库。例如,如果您的“管理员”确实是要接听电话或处理结算问题的服务台员工,那么他们可能拥有完全不同的数据库视图(可能还有编辑数据的方式)。常规申请。
拥有多个站点的缺点是可能使模型(验证,关联等)不同步。拥有一个网站的缺点是,您最终可能会在以前易于理解的网站部分插入各种丑陋的“if-admin”代码。哪个问题更容易处理取决于您的要求。