2011-06-13 31 views
9

Devise'yi ilk kez deniyorum. Yapmak istediğim şeylerden biri, Yönetici kullanıcılarının kullanıcı oluşturmaları, bulmaları ve düzenlemeleri için bir arayüz sağlamaktır. İşte yanlış gittiğim yer.Devise ile yönetici kullanıcı yönetimi

Kullanıcıları listeleyen ve kullanıcı oluşturma ve güncelleme için yöntemler ve görünümler sunan ApplicationController'dan miras alan bir PeopleController sınıfı oluşturdum. Her şey bir istisna ile iyi çalışır. Yönetici kullanıcı kendi kaydını güncellediğinde, oturum temizlenir ve kaydedildikten sonra tekrar giriş yapmaları gerekir.

Bu uygulamada kaydedilebilir modül kullanmıyorum. Sadece bir yönetici kullanıcı yeni kullanıcılar oluşturabilir. Kullanıcı yönetim araçları sağlamak için doğru yol nedir. Kendi denetleyicimi oluşturmak yanlış bir yol gibi görünüyor.

Yardımlarınız için şimdiden teşekkür ederiz.

cevap

7

Yardımlarınız için çok teşekkür ederim. Bu aslında tam olarak ne yapıyorum.

sign_in resource_name, resource, :bypass => true 

Bu:

https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password

Bu ihtiyacım çizgidir: Ben bu wiki kendi kayıt düzenleme beni temize çıktıktan kullanıcı oturumunun sorunu çözmek yardımcı bir ipucu keşfetti yöntem Devise :: Denetçiler :: Yardımcıları'nda bulunur, bu yüzden denetleyicide bunu yaptım. Geçerli kullanıcı kendi rekorunu düzenler,

def update 
    @person = User.find(params[:id]) 
    if @person.update_attributes(params[:user]) 
    sign_in @person, :bypass => true if current_user.id == @person.id 
    redirect_to person_path(@person), :notice => "Successfully updated user." 
    else 
    render :action => 'edit' 
    end 
end 

Şimdi, oturum geri yüklenir: current_user.id düzenlenmekte olan id eşittir yalnızca
class PeopleController < ApplicationController 
    include Devise::Controllers::Helpers 

Sonra güncelleme yönteminde ben diyoruz kaydedildikten sonra.

Yanıtlarınız için tekrar teşekkürler.

6

Bu, uygulamalarımdan birinde kullanıcıları nasıl yönetirim.

class AddRoleToUser < ActiveRecord::Migration 
    def change 
    add_column :users, :role, :string, :default => "client" 
    end 
end 

ve benim User modeli: Sonra

class User < ActiveRecord::Base 
    # Include default devise modules. Others available are: 
    # :token_authenticatable, :confirmable, :lockable and :timeoutable 
    devise :database_authenticatable, :recoverable, :rememberable, :trackable, :validatable 

    # Setup accessible (or protected) attributes for your model 
    attr_accessible :email, :password, :password_confirmation, :remember_me 

    def admin? 
    self.role == "admin" 
    end 
end 

yeni kullanıcılar oluşturmak üzere hangi bir bu göç ile role sütunu eklendi tek User sınıf

rails g devise User 

ile oluşturulan sahip tek yapmanız gereken bir denetleyicide (belki de Devise::RegistrationsController alt sınıfında bile) özel bir yöntem sağlamak:

# some_controller.rb 
def custom_create_user 
    if current_user.admin? 
    User.create(:email => params[:email], password => params[:password]) 
    redirect_to(some_path, :notice => 'sucessfully updated user.') 
    else 
    redirect_to(some_other_path, :notice => 'You are not authorized to do this.') 
    end 
end 
+0

Ayrıca, ayrı bir "Rol" modeline gitmenizi de öneririm, böylece bir kullanıcı gerektiğinde birden fazla role sahip olabilir. Muhtemelen herşeyi de kolaylaştırırdı. Daha sonra bir kullanıcı, user_id ve role_id olan "UserRole" olarak adlandırılan bir model. – ardavis

+0

Bu, birden çok rol veya karmaşık izinleri tanımladığımda genellikle [cancan] (https://github.com/ryanb/cancan) kullandığımda doğrudur. – David

+3

CanCan'ı da kullanıyorum ama yine de Ayrı Rol Modelini kullanıyorum. Bu harika viki sayfasına göz atın Ryan Bates şunları yaptı: https://github.com/ryanb/cancan/wiki/Separate-Role-Model – ardavis

İlgili konular