2010-12-20 24 views
11

registerable modülünün etkinleştirilmesiyle Devise kullanarak kimlik doğrulama ayarlı bir Rails 3 uygulaması var.Raylar: (Devise) Yeni kullanıcılar için iki farklı yöntem?

Şu anda olan tüm Devise registerable modülünü kullanmak için dış kayıt formumuzu kullanarak kaydolan yeni kullanıcılara sahip olmak istiyorum. Bununla birlikte, admin kullanıcısının yeni kullanıcılar oluşturmasını (Bence) Devise'nin registerable modülünü atlamasını da istiyorum. Ben admin kullanıcı için bunu istediğiniz gibi engelli registerable ile

  • , benim standart UsersController tıpkı diğer Raylı iskele gibi çalışır. Ancak, şimdi yeni kullanıcılar kendi başlarına kayıt olamaz. registerable ile

  • benim standart UsersController yeni kullanıcı eylemi (yerine Devise::RegistrationsController çağırarak) çağrısında hiçbir zaman, etkin ve benim CRUD eylemleri hiçbir yeni ile benim kök sayfaya geri boylayacak (bütün çalışmak görünmüyor kullanıcı oluşturuldu ve flaş mesajı yok). İşte isteğinden günlüğü var:

    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"=>"[email protected]", "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 
    

... ama dışarıda formu ile yeni kullanıcılar kayıt mümkün.

nasıl admin kullanıcı el kendi başlarına kayıt olabilirsiniz yeni kullanıcılar ve konuk kullanıcıların oluşturabileceği şekilde, bu yöntemlerin her ikisi de birlikte çalışmak için alabilirim? aşağıdaki gibi

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 

Ve yolları Ayarı:

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 

cevap

12

Sen kullanıcılarını yönetmek için ayrı bir denetleyicisi oluşturmak gerekir


Ben standart CRUD benim Kullanıcılar denetleyicisi kurulum var. Hep yönetici kullanıcıları oluşturup çalışmak için özel bir ad vermek bana bunu açıklayalım.

config/routes.rb

devise :users # Allow users to register here 

namespace :admin do 
    resources :users # Have the admin manage them here. 
end 
+3

Duh! Aradığım gizli sosdu. Çok fazla problem çözüyor ... kafamı bir duvara yasladığımda özür dilerim. Teşekkürler. – neezer

+0

Denetleyicide ad alanı nasıl verilir? –

+0

Raylarda ad alanlarının nasıl kullanılacağı hakkında biraz daha ayrıntılı bilgi.Sen uygulaması> denetleyicileri bir klasör oluşturmanız gerekir - bu örnekte size kontrolörleri klasöründe yeni bir klasör yönetici koyun ve sonra orada yeni kullanıcılar denetleyicisi koyardı. http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing - dosyaları daha sonra applcom/admin/kullanıcıların sorgulanabilmelidir –

0

Eğer routes.rb içinde

devise_for :users, :controllers => {:registrations => "users/registrations" } 

sonra bu yapılandırma eklemek gerek bu gibi kendi kayıt denetleyicisini uygulayın.daha sonra kendi görünümünüzü yazabilirseniz, geçersiz kılma ayarınız varsa, belki de bazı işlevleri kaybedersiniz, örn. doğrulamaları. Bunları kendi başınıza uygulamalısınız

İlgili konular