4

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

我使用 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

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

  1. 在我的“常规”registrations_controller 和confirms_controller 中有条件(基于用户权限)来呈现和重定向不同的视图?(参见在不同的控制器中设计表格

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

4

1 回答 1

1

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

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

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

我在许多应用程序中都采用了相同的方法,但还没有失败。

编辑

namespace :admin do
  resources :users
end
于 2012-12-29T14:06:23.923 回答