Я нашел этот пример 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)
).