2014-01-15 1 views
0

В моем приложении пользователи могут приглашать других пользователей «Contributors» на свою учетную запись. Эти участники после того, как они вошли в систему, перенаправляются на панель мониторинга, в которой отображаются все учетные записи, в которые они могут войти.Rails: Devise Login как другой пользовательский вопрос

Ниже приведен контроллер, который позволяет Участникам и школьным администраторам регистрироваться на счетах спортсменов. Когда исходный пользователь регистрируется в учетной записи, приложение проверяет переменную session[:original_user_id], чтобы отобразить баннер сообщений в верхней части экрана со ссылкой, чтобы администратор мог войти в свою учетную запись. Это то, что у меня возникают проблемы с попыткой выяснить, как войти первоначальный пользователь назад в

SignInAsController:.

class SignInAsController < ApplicationController 
    before_filter :authenticate_user! 

    include SchoolAdmin::Athletes 

    def create 
    session[:original_user_id] = if (current_user.school_admin? || current_user.athlete_contributor?) 
     current_user.id 
    else 
     nil 
    end 

    user = User.find(params[:id]) 

    if current_user.can_manage?(user) 
     sign_out(User.find(current_user.id)) 
     handle_request(athlete) 
     redirect_to user_root_path 
    else 
     redirect_to :back, notice: "You do not have access to that account" 
    end 
    end 

    private 

    def handle_request(athlete) 
     sign_in(:user, athlete, { bypass: true }) 
    end 
end 

UserModel can_manage? Метод:

class User < ActiveRecord::Base 
    #other methods 

    def can_manage?(user) 
    if athlete_contributor? 
     managed_athletes.include?(user) 
    elsif school_admin? 
     active_subscription.athletes.include?(user) 
    end 

    false 
    end 
end 

ответ

0

Разрабатывает имеют sessions & registrations контроллеров, которые позволяют создавать & переопределения различных методы завещанию


Сессия

Учитывая процесс регистрации в о creating сеанс, я бы посмотрел на реализацию моего собственного метода до destroy текущего sessio п & create новый один со статистикой администратора, как это:

#config/routes.rb 
devise_for :users, :controllers => { :sessions => "sessions" } 
devise_scope :user do 
    post "admin", :to => "devise/sessions#admin_switch" 
end 

#app/controllers/sessions_controller.rb 
class SessionsController < Devise::SessionsController 

    #Switch to "admin" mode 
    def admin_switch 
      sign_out #method to destroy current user's session 
      sign_in #create new session -- needs more work 
    end 

end 

Это должно продемонстрировать, как вы бы достичь своей цели. Если вы хотите, чтобы я добавил еще какой-то код, я, безусловно, внесу свое сообщение! В частности, sign_in команда не будет работать (нужно конкретные данные, переданные ему, и использует Warden)

0

Вы можете использовать Switch User драгоценный камень, который может работать с: : изобрести,: authlogic, Зазор,: restful_authentication или: колдовство

0

Это то, что сработало для меня. Это позволяет пользователю администратора войти в систему как другой пользователь.

class AdminController < ApplicationController 
    before_filter :authenticate_user! 

    def become 
    return unless current_user.is_an_admin? 
    sign_in(:user, User.find(params[:id])) 
    redirect_to root_path 
    end 
end 

Вы также можете сделать sign_in(:user, User.find(params[:id]), { :bypass => true }), если вы не хотите, чтобы обновить last_sign_in_at и current_sign_in когда администратор становится пользователь.

Смежные вопросы