Cancan + Devise,是管理员管理用户的最佳方式

时间:2012-12-29 00:50:10

标签: ruby-on-rails-3 devise cancan

我正在开发一个应用程序,公司管理员应该可以在他的公司中创建和更新用户。 (用户还可以独立创建和更新他们的帐户。)

我使用Devise和Cancan进行注册和权限管理。我配置了Devise以获得所需的注册和用户更新过程。我为管理员视图创建了一个命名空间。

我的管理员控制器(/app/controllers/admin/base_controller.rb)如下所示:

class Admin::BaseController < ApplicationController
  authorize_resource :class => false
  layout 'admin'

  def dashboard
  end
end

除了我的“常规”users_controller之外,我还有一个控制器(/app/controllers/admin/users_controller.rb)以及专门用于管理员用户管理的相关视图。

class Admin::UsersController < Admin::BaseController
  ...
end

现在,实现与Devise相关的用户管理功能的最简洁方法是什么(此时,创建和更新用户)?

  1. 在我的“常规”registrations_controller和confirmations_controller中有一个条件(基于用户权限)来呈现和重定向不同的视图吗? (参见Devise form within a different controller

  2. 或者在我的管理命名空间中创建新的控制器?如果最新情况更好,请遵循哪些主要步骤?

1 个答案:

答案 0 :(得分:1)

这就是你的问题,一旦命名空间或将任何用户管理移动到另一个控制器,你就离开了Devise的范围。因此,当您在Admin::UsersController时,Devise并不关心您的工作,也没有您所说的“与设计相关的”管理功能。如果您愿意,可以将Admin::UsersController实现为标准RESTful控制器。

通过这种方式,通过命名空间控制器创建用户,Devise仍将执行确认等操作。在以这种方式创建和更新用户时,要记住一件小事。如果您没有设置密码作为管理员,则必须从params哈希中删除passwordpassword_confirmation。为此,createupdate操作的开头将如此:

if params[:user][:password].blank?
  params[:user].delete(:password)
  params[:user].delete(:password_confirmation)
end

我在许多应用程序中使用了相同的方法,并且还没有失败。

修改

namespace :admin do
  resources :users
end