Je suis relativement nouveau sur les rails (et le codage) et ma compréhension n'est pas à 100% sur ce sujet, j'ai essayé de lire la documentation des paramètres forts sur require, et je suis incapable de résoudre le problème.Est-ce une façon non sécurisée d'utiliser des paramètres forts pour les rails?
J'ai créé des utilisateurs et des administrateurs en utilisant Pundit pour un site. J'ai créé un tableau de bord auquel seuls les administrateurs peuvent accéder, ce qui donne un aperçu de tous les utilisateurs, un moyen de les supprimer et un moyen de changer leur rôle. D'après ce que je comprends, cela utilise la méthode de mise à jour users_controller qui passe dans user_params. La méthode de mise à jour de l'utilisateur est également, d'après ce que je comprends, utilisé pour les utilisateurs d'éditer leur propre profil (changement de courriel, etc.) et je suis inquiet que je leur ai ajouté un moyen de passer un changement de rôle à travers la forme en quelque sorte.
Est-ce la bonne façon de procéder? Ou devrais-je créer un nouvel ensemble de paramètres pour le changement de rôle, qui sont uniquement utilisés sur la page du tableau de bord de l'utilisateur - si oui, comment le ferais-je? J'ai l'impression d'en manquer une ou quelques petites choses ici.
user_controller.rb: classe UsersController < ApplicationController
before_filter :authenticate_user!
after_action :verify_authorized
before_action :set_user, only: [:edit, :update, :show, :destroy]
def update
if @user.update(user_params)
authorize @user
flash[:success] = "Profile updated successfully!"
redirect_to @user
else
render 'edit'
end
end
def create
@user = User.new(user_params)
if @user.save
session[:user_id] = @user.id
cookies.signed[:user_id] = @user.id
flash[:success] = "Welcome #{@user.username} to Day One"
redirect_to user_path(@user)
else
render 'new'
end
end
def show
authorize @user
end
def destroy
authorize @user
@user.destroy
flash[:danger] = "User and all their related goals have been deleted"
redirect_to users_path
end
def user_dashboard
@users = User.all
authorize User
end
private
def user_params
params.require(:user).permit(:username, :email, :password, :password_confirmation, :profileimage, :role)
end
def set_user
@user = User.find(params[:id])
end
end
page Tableau de bord:
<% @users.each do |user| %>
<tr>
<td>
<%= link_to user.email, user %>
</td>
<td>
<%= form_for(user) do |f| %>
<%= f.select(:role, User.roles.keys.map {|role| [role.titleize,role]}) %>
<td>
<button><%= f.submit 'Change Role' %></button>
</td>
<% end %>
et enfin user_policy.rb:
class UserPolicy < ApplicationPolicy
attr_reader :current_user, :model
def initialize(current_user, model)
@current_user = current_user
@user = model
end
def index?
@current_user.admin?
end
def show?
# scope.where(:id => record.id).exists?
end
def create?
false
end
def new?
create?
end
def update?
@current_user.admin? || @current_user == @user
end
def edit?
@current_user.admin? || @current_user == @user
end
def destroy?
@current_user.admin?
end
def user_dashboard?
@current_user.admin?
end
end
Pourquoi autorisez-vous l'utilisateur __après avoir effectué la mise à jour? –