ruby-on-rails - Rails 4 自定义管理后端

标签 ruby-on-rails ruby-on-rails-4 admin

我想为练习应用程序创建一个管理后端。阅读完周围的内容后,我大致了解了该做什么,但需要一些说明:

  • 使用命名空间将后端路由到 example.com/admin...
  • 将任何可管理的资源放入命名空间,例如 resources :posts
  • 此时我是否复制普通(面向公众) Controller 并将它们放入管理目录中? (以及 CRUD View )
  • 理论上,面向公众的 Controller 只需要索引和显示操作,对吧?因为 new/create/update/destroy 只能在 admin/controller 中访问。

非常感谢任何澄清或建议。只是想解决这个问题。

最佳答案

我建议不要复制您的 Controller 或应用程序的任何部分。这完全违背了 DRY 原则,即“不要重复自己”。随着应用程序的增长,重复的代码变得非常难以维护和测试。

相反,我建议使用 before filters 限制对某些操作的访问。例如,假设您希望用户能够创建帖子、阅读帖子以及查看帖子列表。在你的 PostsController 中,你可以有这样的东西:

before_action :admin_user?, only: [:edit, :destroy]

注意:before_action 只是 before_filters 的新名称。

因此,像 index 这样的操作将为所有用户正常执行,但如果用户调用 destroy 操作, Controller 将首先通过调用 检查用户是否是管理员>admin_user? 方法(通常在 ApplicationController 中定义)。此方法可以是一个简单的条件,例如“如果用户不是管理员,则显示错误消息并将其重定向回请求之前的位置”,然后使用它来保护您想要的任何操作或资源。例如,您还可以在 View 中使用它,仅当用户是管理员时才在帖子上显示删除按钮。

这是针对特定于资源的操作。很多时候,在站点中设立一个部分来整合资源 View 和管理操作也是一个好主意。这将是它自己的 Controller / View (我称之为我的 AdminController),您可以使用上述方法保护其中的所有操作:

before_action :admin_user?

要使用各个资源 Controller 中定义的方法使您的资源可供 AdminController 使用,您可以在 paths.rb 中执行此操作:

namespace :admin do
  resources :users
end

这将使http://yoursite.com/admin/users/index仍会调用用户 Controller 中的索引操作,但它将在管理员用户的上下文中发生(因为上面的 before_action)。

关于ruby-on-rails - Rails 4 自定义管理后端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24298299/

相关文章:

ssl - Glassfish 管理控制台加载空白页

ruby-on-rails - Rails 4:为什么生产中无法加载字体?

ruby-on-rails - link_to 中的 Rails params.merge

javascript - Warning : flattenChildren(. ..):遇到两个 child

magento - 当多个管理员编辑相同的内容时可以锁定页面吗?

symfony2 翻译奏鸣曲管理包

ruby-on-rails - Rails 将普通旧字符串作为 BLOB 保存到 SQlite?我快要疯了!

ruby-on-rails - 如何匹配YYYY-MM-DDThh :mm:ssTZD timezone format in ruby

ruby-on-rails - 从单独的进程调用 sidekiq 工作程序

ruby-on-rails - 是否有 Rails 4 循环依赖 : :destroy workaround?