【问题标题】:Cancan + Devise, best way to have admin manage usersCancan + Devise,让管理员管理用户的最佳方式
【发布时间】:2012-12-14 04:47:18
【问题描述】:

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

我使用 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 中有条件(基于用户权限)来呈现和重定向不同的视图? (参见Devise form within a different controller

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

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

    • 感谢您的解释!你能解释一下这种情况下的路线是什么样子的吗?
    • @alex,我在回答中添加了路线的样子。
    • 我将我的 admin/users_controller 声明为“class Admin::UsersController "some_devise_controller" end 2 ) 您正在测试绕过路由器的设计控制器。”这里缺少什么?
    • 我在“下添加了 get "'/manage/users' => 'admin/users#index'" 和 "get 'manage/users/new' => 'admin/users#new'" devise_scope :user do",但奇怪的是我必须为每个动作添加一条路线……有什么更简洁的方法可以让它工作吗?
    • 你不应该从Devise::RegistrationsController继承,只是ActionController::Base。在这种情况下你根本不需要设计,你只是通过标准的 RESTful 操作来管理用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多