我想为练习应用创建管理后端。在阅读完之后,我已经了解了该做什么,但希望得到一些澄清:
非常感谢任何澄清或建议。试图绕过这个。
答案 0 :(得分:3)
我建议不要复制您的控制器或应用程序的任何部分。这完全违背了DRY原则,即“不要重复自己”。随着应用程序的增长,重复的代码变得真的难以维护和测试。
相反,我建议使用before filters限制对某些操作的访问。例如,假设您希望用户能够创建帖子,阅读帖子和查看帖子列表。在你的PostsController中,你可以这样:
before_action :admin_user?, only: [:edit, :destroy]
注意:before_action只是before_filters的新名称。
然后像index
这样的操作将对所有用户正常执行,但如果用户调用destroy操作,控制器将首先通过调用admin_user?
来检查用户是否是管理员。方法(通常在ApplicationController中定义)。此方法可以是一个简单的条件,例如“如果用户不是管理员,则闪烁错误消息并将其重定向回请求之前的位置”,然后使用它来保护您想要的任何操作或资源。例如,只有当用户是管理员时,您还可以在视图中使用它来显示帖子上的删除按钮。
这是针对资源特定的操作。通常,拥有一个整合资源视图和管理操作的站点部分也是一个好主意。这将是它自己的控制器/视图(我称之为我的AdminController
),您可以使用上述方法保护其中的所有操作:
before_action :admin_user?
要使用各个资源控制器中定义的方法使您的资源可用于AdminController,您可以在routes.rb中执行此操作:
namespace :admin do
resources :users
end
这将使http://yoursite.com/admin/users/index仍然会在Users控制器中调用索引操作,但它将在admin用户的上下文中发生(因为上面的before_action
)。