我正在开发一个应用程序,公司管理员应该可以在他的公司中创建和更新用户。 (用户还可以独立创建和更新他们的帐户。)
我使用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相关的用户管理功能的最简洁方法是什么(此时,创建和更新用户)?
在我的“常规”registrations_controller和confirmations_controller中有一个条件(基于用户权限)来呈现和重定向不同的视图吗? (参见Devise form within a different controller)
或者在我的管理命名空间中创建新的控制器?如果最新情况更好,请遵循哪些主要步骤?
答案 0 :(得分:1)
这就是你的问题,一旦命名空间或将任何用户管理移动到另一个控制器,你就离开了Devise的范围。因此,当您在Admin::UsersController
时,Devise并不关心您的工作,也没有您所说的“与设计相关的”管理功能。如果您愿意,可以将Admin::UsersController
实现为标准RESTful控制器。
通过这种方式,通过命名空间控制器创建用户,Devise仍将执行确认等操作。在以这种方式创建和更新用户时,要记住一件小事。如果您没有设置密码作为管理员,则必须从params哈希中删除password
和password_confirmation
。为此,create
和update
操作的开头将如此:
if params[:user][:password].blank?
params[:user].delete(:password)
params[:user].delete(:password_confirmation)
end
我在许多应用程序中使用了相同的方法,并且还没有失败。
修改
namespace :admin do
resources :users
end