module Authentication extend ActiveSupport::Concern included do before_action :require_login helper_method :current_user, :logged_in? end private def current_user @current_user ||= session[:user_id] ? User.find_by(id: session[:user_id]) : nil end def logged_in? current_user.present? && current_user.active? end def require_login if current_user.present? && !current_user.active? logout redirect_to login_path, alert: "Il tuo account รจ stato disabilitato." return end return if logged_in? redirect_to login_path, alert: "Effettua l'accesso per continuare." end def require_admin return if current_user&.admin? && current_user.active? redirect_to root_path, alert: "Accesso riservato agli amministratori." end def login_as(user) reset_session session[:user_id] = user.id @current_user = user Current.user = user end def logout reset_session @current_user = nil Current.user = nil end def set_current_user Current.user = current_user end end