Администрирование пользователей с помощью Devise - PullRequest
10 голосов
/ 14 июня 2011

Я пробую Devise впервые. Одна из вещей, которую я хотел сделать, - предоставить пользователям Admin интерфейс для создания, поиска и редактирования пользователей. Здесь я могу ошибаться.

Я создал класс PeopleController, который наследуется от ApplicationController, который перечисляет людей и предоставляет методы и представления для создания и обновления пользователей. Все отлично работает с одним исключением. Когда пользователь с правами администратора обновляет свою собственную запись, сеанс очищается, и после его сохранения ему необходимо снова войти в систему.

В этом приложении я не использую регистрируемый модуль. Только администратор может создавать новых пользователей. Как правильно разработать инструменты управления пользователями. Создание моего собственного контроллера, похоже, было неправильным путем.

Заранее спасибо за помощь.

Ответы [ 2 ]

8 голосов
/ 14 июня 2011

Большое спасибо за помощь.По сути, это именно то, что я делаю.Я обнаружил подсказку, которая помогла мне решить проблему очистки сеанса пользователя, когда он редактирует свою собственную запись в этой вики:

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

Это строка, которая мне была нужна:

sign_in resource_name, resource, :bypass => true

Этот метод находится в Devise :: Controllers :: Helpers, поэтому я сделал это в моем контроллере.

class PeopleController < ApplicationController
   include Devise::Controllers::Helpers

Тогда в моем методе обновления я вызываю его, только если current_user.idравняется редактируемому идентификатору:

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

Теперь, если текущий пользователь редактирует свою собственную запись, сеанс восстанавливается после сохранения.

Еще раз спасибо за ваши ответы.

6 голосов
/ 14 июня 2011

Так я управляю пользователями в одном из моих приложений.У меня есть только один класс User, созданный с

rails g devise User

, к которому я добавил столбец role с этой миграцией:

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

и моя модель User:

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

Затем для создания новых пользователей все, что вам нужно сделать, - это предоставить в контроллере собственный метод (возможно, даже подкласс Devise::RegistrationsController), например:

# 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...