2012-12-29 47 views
3

我正在研究公司管理員應該能夠在其公司中創建和更新用戶的應用程序。 (用戶也可以獨立創建和更新他們的帳戶)。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,我有一個控制器(/應用/控制器/管理/users_controller.rb)以及專用於管理用戶管理的相關視圖。

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

現在,什麼是最簡潔的方式來實現設計相關的用戶管理功能(在這一點上,創建和更新用戶)?

  1. 在我的「常規」registrations_controller和confirmations_controller中有一個條件(基於用戶權限)來呈現和重定向不同的視圖? (參見Devise form within a different controller

  2. 或者在我的管理命名空間中創建新的控制器?如果最新的更好,那麼主要的步驟是什麼?

回答

1

這就是你的問題,一旦你命名空間或移動任何用戶管理到另一個控制器,你離開了設計的範圍。所以在Admin::UsersController的地方,Devise並不在乎你在做什麼,也沒有你所說的與設計相關的管理特性。如果您願意,可以將您的Admin::UsersController作爲標準RESTful控制器來實施。

以這種方式,通過命名空間控制器創建用戶,Devise仍然會執行諸如確認等操作。以這種方式創建和更新用戶時,請記住一件小事。如果您未設置管理員密碼,則必須從參數哈希中刪除passwordpassword_confirmation。要做到這一點,你createupdate行動的開始看起來像這樣:

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

我聘請我的很多應用這種方法,以及還沒有擁有它失敗。

編輯

namespace :admin do 
    resources :users 
end 
+0

感謝您的解釋!你能解釋一下這種情況下的路線嗎? – alex

+0

@alex,我添加到我的答案是什麼路線將看起來像。 – janders223

+0

我將我的admin/users_controller聲明爲「class Admin :: UsersController 」some_devise_controller「end 2)你正在測試一個Devise控制器繞過路由器。「這裏缺少什麼? – alex