Как проверить роль пользователя после входа в Rails? - PullRequest
0 голосов
/ 28 февраля 2019

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

моя user модель:

class User < ActiveRecord::Base
  enum role: {student: 0, teacher: 1}

  belongs_to :user
  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :validatable
  has_many :posts

  after_initialize do
  if self.new_record?
    self.role ||= :student
  end
end
end

так что теперь в my application.html.erb я хочу проверить и отобразить разные навигационные панели, основанные на разных ролях пользователя:

<% if user_signed_in? %>
<% if teacher? %>
<!-- show navbar for teacher -->
<% else %>
<!-- show navbar for student -->
<% end %>
<% else %>
<!-- show login/reg buttons -->
<% end %>

и вот мой application контроллер:

class ApplicationController < ActionController::Base
  protect_from_forgery with: :exception
  before_action :configure_permitted_parameters, if: :devise_controller?
  helper_method :teacher? , :student?

  def teacher?
      current_user.role = User.where(role: [:teacher])
  end

  def student?
    current_user.role = User.where(role: [:student])
  end

  protected
    def configure_permitted_parameters
      devise_parameter_sanitizer.permit(:sign_up, keys: [:name])
      devise_parameter_sanitizer.permit(:account_update, keys: [:name])
    end
end

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Попробуйте добавить атрибут role в качестве разрешенного параметра для разработки.Вы можете сделать это так:

class ApplicationController < ActionController::Base
  before_action :configure_permitted_parameters, if: :devise_controller?

  protected

  def configure_permitted_parameters
    devise_parameter_sanitizer.permit(:sign_up, keys: [:role])
  end
end

Имейте в виду, это только для регистрации.Если вам это нужно для входа в систему и / или обновления, вам также необходимо добавить их.Вы можете найти больше информации здесь: Разработать 4 сильных параметра .Если вы используете Devise ниже версии 4, вы можете увидеть документы здесь: Devise <4 Strong Parameters </a>

0 голосов
/ 28 февраля 2019

Ваши методы ApplicationController#teacher? и ApplicationController#student? действительно плохие, удалите их и используйте вместо них встроенные User#teacher? или User#student?:

<% if current_user.teacher? %> 

Кстати, вам это тоже не нужноafter_initialize хак, который вы используете для установки значения по умолчанию student - достаточно установить для значения по умолчанию столбца role в дБ значение 0.

Также, как оказалось, вынеобходимо добавить role к devise_permitted_parameters, чтобы вы могли обновить его значение из контроллеров devise:

def configure_permitted_parameters
  devise_parameter_sanitizer.permit(:sign_up, keys: %i[name role])
  # ...
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...