Rails: (Разработать) Два разных метода для новых пользователей? - PullRequest
11 голосов
/ 20 декабря 2010

У меня есть приложение Rails 3 с настройкой аутентификации с использованием Разработка с включенным модулем registerable.

Я хочу, чтобы новые пользователи, зарегистрировавшиеся с помощью нашей внешней регистрационной формы, использовали полный модуль Devise registerable, что происходит сейчас.

Однако я также хочу, чтобы пользователь admin мог создавать новых пользователей напрямую, минуя (я думаю) модуль registerable Devise.

  • При отключенном registerable мой стандартный UsersController работает так, как я хочу, для пользователя admin, как и любой другой эшафот Rail. Однако теперь новые пользователи не могут зарегистрироваться самостоятельно.

  • При включенном registerable мой стандартный UsersController никогда не вызывается для нового пользовательского действия (вместо этого вызывается Devise::RegistrationsController), и мои действия CRUD, похоже, не работают вообще (меня сбрасывают обратно на мой корневая страница без создания нового пользователя и без флеш-сообщения). Вот журнал из запроса:

    Started POST "/users" for 127.0.0.1 at 2010-12-20 11:49:31 -0500   
    Processing by Devise::RegistrationsController#create as HTML   
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"18697r4syNNWHfMTkDCwcDYphjos+68rPFsaYKVjo8Y=", "user"=>{"email"=>"test@test.com", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "role"=>"manager"}, "commit"=>"Create User"}   
    SQL (0.9ms)   ...
    
    User Load (0.6ms)  SELECT "users".* FROM "users" WHERE ("users"."id" = 2) LIMIT 1   
    SQL (0.9ms)   ...
    
    Redirected to http://test-app.local/ Completed 302 Found in 192ms
    

... но я могу зарегистрировать новых пользователей через внешнюю форму.

Как заставить оба этих метода работать вместе, чтобы мой пользователь admin мог вручную создавать новых пользователей и гостевые пользователи могут зарегистрироваться самостоятельно?


У меня установлен пользовательский контроллер для стандартного CRUD:

class UsersController < ApplicationController
  load_and_authorize_resource

  def index
    @users = User.where("id NOT IN (?)", current_user.id) # don't display the current user in the users list; go to account management to edit current user details
  end

  def new
    @user = User.new
  end

  def create
    @user = User.new(params[:user])
    if @user.save
      flash[:notice] = "#{ @user.email } created."
      redirect_to users_path
    else
      render :action => 'new'
    end
  end

  def edit
  end

  def update
    params[:user].delete(:password) if params[:user][:password].blank?
    params[:user].delete(:password_confirmation) if params[:user][:password].blank? and params[:user][:password_confirmation].blank?
    if @user.update_attributes(params[:user])
      flash[:notice] = "Successfully updated User."
      redirect_to users_path
    else
      render :action => 'edit'
    end
  end

  def delete
  end

  def destroy
    redirect_to users_path and return if params[:cancel]
    if @user.destroy
      flash[:notice] = "#{ @user.email } deleted."
      redirect_to users_path
    end
  end

end

И мои маршруты настроены следующим образом:

TestApp::Application.routes.draw do

  devise_for :users

  devise_scope :user do
    get "/login", :to => "devise/sessions#new", :as => :new_user_session
    get "/logout", :to => "devise/sessions#destroy", :as => :destroy_user_session
  end

  resources :users do
    get :delete, :on => :member
  end

  authenticate :user do
    root :to => "application#index"
  end
  root :to => "devise/session#new"

end

Ответы [ 2 ]

12 голосов
/ 21 декабря 2010

Вы должны создать отдельный контроллер для управления своими пользователями.Я всегда создаю администраторов и предоставляю им специальное пространство имен для работы. Позвольте мне проиллюстрировать это:

config/routes.rb

devise :users # Allow users to register here

namespace :admin do
  resources :users # Have the admin manage them here.
end
0 голосов
/ 23 февраля 2012

вам нужно добавить эту конфигурацию в ваши маршруты.контроллер по умолчанию, может быть, вы потеряете некоторые функции, например проверки.вам нужно реализовать их самостоятельно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...