Squeak.ru - шаблоны программирования

rails 4 - авторизация на основе ролей с нуля

Я недавно начал изучать рельсы и должен был разработать приложение с тремя ролями: пользователь (администратор), студент, инструктор. Я сам написал следующий код. но проблема в том, что это делает роль всех активных пользователей похожей на самый последний вход в систему. Например, если администратор вошел в систему, а затем вошел студент, а затем, если администратор обновит свою страницу, он также станет студентом. Что я должен изменить в своем коде, чтобы решить эту проблему? И если это невозможно реализовать таким образом, предложите мне, как я должен решить эту проблему. благодаря.

вот мой код users_controller:

def login
if session[:user_id]!=nil
  redirect_to(:action => 'index')
end
end
def attempt_login
if params[:username].present? && params[:password].present?
    found_user = User.where(:username => params[:username]).first
    if found_user
      authorized_user = found_user.authenticate(params[:password])
      if authorized_user
        flash[:notice] = "Welcome! You are LoggedIn"
        session[:user_id] = authorized_user.id
        redirect_to(:action => 'index')
        return
      end
    end
    found_student = Student.where(:username => params[:username]).first
      if found_student
        student_id = Student.authenticate( params[:username],params[:password])
        if student_id
          flash[:notice] = "Welcome! You are LoggedIn"
          session[:user_id] = student_id
          redirect_to(:action => 'student_index')
          return
        end
      end
    found_instructor = Instructor.where(:username => params[:username]).first
      if found_instructor
        instructor_id = Instructor.authenticate( params[:username],params[:password])
        if instructor_id
          flash[:notice] = "Welcome! You are LoggedIn"
          session[:user_id] = instructor_id
          redirect_to(:action => 'instructor_index')
          return
        end 
      end
    flash[:notice] = "Invalid username/Password combination."
    redirect_to(:action => 'login')
end
end


def logout
flash[:notice]="Logged out"
session[:user_id] = nil
redirect_to(:action => "login")
end

и вот мой код application_controller.rb

def require_login
  unless session[:user_id] or config.my_config
      flash[:notice] = "You are not Logged In"
      redirect_to :root
      return false
  else
    return true
  end

end

Ответы:


1

Мне кажется, что вы используете один и тот же сеансовый ключ session[:user_id] для хранения идентификаторов User, Student и Instructor. Как вы различаете три типа зарегистрированных пользователей?

Вполне возможно, что если вошедший Student посещает путь instructor_index, то идентификатор учащегося будет использоваться для загрузки Instructor с тем же идентификатором, и будет отображаться представление для преподавателя. Я не вижу никакого кода, указывающего на обратное.

Я ожидал, что такая система будет хранить как session[:user_id], так и session[:user_type], чтобы можно было точно идентифицировать вошедшего в систему лично.

29.05.2016
Новые материалы

Угловая структура архитектуры
Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

«Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

Создайте API с помощью Python FastAPI
Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

Веселье с прокси-сервером JavaScript
Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...