Ruby на рельсах пример приложения rails-devise-roles - PullRequest
1 голос
/ 30 мая 2020

Я нашел этот пример Ruby в приложении rails демонстрирующий devise gem и его использование с ролями.

В readme упоминается, что:

обычный пользователь не может изменить свою роль

обычный пользователь может видеть (и редактировать) свой собственный профиль пользователя

Однако, глядя на пользовательский контроллер

class UsersController < ApplicationController
  before_action :authenticate_user!
  before_action :admin_only, :except => :show

  def show
    @user = User.find(params[:id])
    unless current_user.admin?
      unless @user == current_user
        redirect_to root_path, :alert => "Access denied."
      end
    end
  end

  def update
    @user = User.find(params[:id])
    if @user.update_attributes(secure_params)
      redirect_to users_path, :notice => "User updated."
    else
      redirect_to users_path, :alert => "Unable to update user."
    end
  end


  def admin_only
    unless current_user.admin?
      redirect_to root_path, :alert => "Access denied."
    end
  end

  def secure_params
    params.require(:user).permit(:role)
  end

end

Мы видим, что все действия разрешены только для пользователей с правами администратора, за исключением show, где текущий авторизованный пользователь проверяется, если он @user, который мы пытаемся получить / шоу. Это имеет смысл для этой части файла readme «обычный пользователь может видеть свой собственный профиль».

Чего я не понимаю, так это то, что в readme говорится, что пользователь также может редактировать свой собственный профиль, но update действие может быть выполнено только пользователем с правами администратора (и, в таком случае, администратор может изменить только роль пользователя? permit(:role)).

1 Ответ

0 голосов
/ 31 мая 2020

Я предлагаю следовать более актуальному руководству по этому поводу: https://altalogy.com/blog/rails-6-user-accounts-with-3-types-of-roles/

Связанное репо последний раз обновлялось 4 года go. Я попытался развернуть репо и протестировать его локально по этим вопросам, которые вы подняли, и столкнулся со слишком большим количеством проблем, пытаясь это сделать. Руководство по этому поводу ищите в другом месте.

Edit: Я просмотрел код и не совсем уверен, как это приложение делает то, что говорит README.

...