【问题标题】:Building Admin Areas in Rails - General Questions在 Rails 中构建管理区域 - 一般问题
【发布时间】:2010-04-08 18:43:18
【问题描述】:

在 Rails 应用程序中创建管理区域的典型格式/结构是什么?

具体来说,我对这些主题感到困惑:

  • 如何处理模型资源对公众和管理员都可用的情况?即用户模型,任何人都可以创建用户、登录等,但只有管理员可以查看用户、删除/更新用户等。
  • 什么是正确的路由约定?
  • 如何构建控制器?
  • 是否认为重复的控制器正常?即管理员版本和非管理员版本?

谢谢!

【问题讨论】:

    标签: ruby-on-rails ruby admin


    【解决方案1】:

    您可以有 2 个控制器,一个用于公共部分,另一个用于管理员并使用管理员命名空间:

    map.namespace(:admin, :path_prefix => 'settings', :name_prefix => 'admin_') do |admin|
        admin.resources :users  
    end
    

    它将映射到 /settings/users 并且控制器必须以 Admin:: 为前缀 像Admin::UsersController 一样,控制器文件也必须放在 app/controllers 目录下的 admin 文件夹中。

    • 是的,如果它们使您的代码更清晰,例如,如果您有相同的管理员视图和公共视图控制器,那么它们必须根据管理员或普通用户是否访问它们来呈现不同的视图模板。 还有see here for more information。

    【讨论】:

    • 达米恩,感谢您的回答。关于第二点RE路由的问题。这对您使用控制器生成器有何影响?你有脚手架吗?
    • 您也可以限定控制器生成范围...script/generate controller admin/users.
    【解决方案2】:

    有一系列 Railscasts 展示了一种通过在视图和控制器中使用条件来避免拥有单独管理区域的方法:Where Administration Goes。

    这可能不适合您的用例,但值得一看。

    【讨论】:

      【解决方案3】:

      除了在我的路由中设置管理命名空间外,我还使用 declarative_authorization 插件,它允许您为用户定义角色并定义控制器操作和模型属性的访问控制。如果用户尝试访问没有权限的操作,插件将重定向他们的请求。真正巧妙的处理方式,有助于提供细粒度的安全性。

      Rails 生态系统中还有其他几个提供类似功能的插件。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-16
        相关资源
        最近更新 更多