我强烈建议将所有管理操作放在应用程序中的管理命名空间下,并使用 CanCanCan 之类的 gem 进行授权。
例如,删除User
对象的操作将在命名空间UsersController
下方Admin
。控制器基本上是这样定义的:
class Admin::UsersController < Admin::BaseController
def destroy
user = User.find(params[:id])
user.destroy
redirect_to admin_users_path
end
end
这里Admin::BaseController
引用的是为您的管理命名空间提供基础的控制器。它应该授权用户,如下所示:
class Admin::BaseController < ApplicationController
before_filter :authenticate_user!
before_filter :authorize_admin
def authorize_admin
authorize! :manage, :all
end
end
authorize!
助手将由CanCan
提供。我不会重复CanCan wiki关于设置Ability
课程的内容。CanCan 也包含在作者的精彩截屏视频中。
在这个Ability
类中,您应该检查该布尔字段,然后让 CanCan 处理授权。
要实际路由到这个 new ,请在文件Admin::UsersController
中定义它:config/routes.rb
namespace :admin do
resources :users
end
如果您不想使用 CanCanCan,还有Pundit。