[RUBY] [Avec une explication de pourquoi le faire] Comment empêcher les autres de modifier avec l'application CRUD de Rails avec fonction d'authentification

introduction

Mon nom est yuki. Grâce à DMMWEBCAMP, je travaille maintenant en tant qu'ingénieur WEB, rassemblant mes amis pour développer des services, enseignant la programmation en tant que tuteur et profitant de ma vie d'ingénieur au quotidien.

Nous fournissons également une assistance et des questions d'erreur pour ceux qui visent des inexpérimentés, donc si vous êtes intéressé, veuillez contacter DM.

Cette fois, j'expliquerai la fonction qui empêche les autres de modifier vos propres messages, ce qui est courant dans les applications CRUD avec fonction d'authentification.

supposition

buts finaux

Implémentation d'une fonction de redirection vers une page de liste etc. si l'affiche et l'éditeur sont différents lors de la saisie de l'URL pour éditer l'article en solide

# post/1/Entrez une URL telle que modifier
#Si l'affiche et l'éditeur sont différents/Rediriger vers les messages

① Créez une méthode qui passe toujours lorsque vous essayez de modifier

"Lorsque vous essayez de modifier le message de quelqu'un d'autre, redirigez-le" signifie que lorsque vous essayez de le modifier, vous devez ** appeler cette fonction **. Tout d'abord, créons une situation dans laquelle un certain processus peut être lu lors d'une tentative de modification ou de mise à jour.

posts_controller.rb


class PostssController < ApplicationController
  before_action :correct_user, only: [:edit, :update]

  #Omission

  def edit
    @book = Post.find(params[:id])
  end
end

before_action est expliqué d'une manière facile à comprendre dans cet article. En d'autres termes, la méthode spécifiée est toujours exécutée avant l'action spécifiée.

Cette fois, avant de modifier et de mettre à jour ... correct_user ... c'est-à-dire que nous appelons une méthode qui vérifie l'utilisateur correct.

② Définissez la méthode à appeler

posts_controller.rb



#Omission
private
  def correct_user
    @post = Post.find(params[:id]) #Identifier le message en fonction de son identifiant
    @user = @post.user             #Identifier l'utilisateur associé à la publication identifiée et@Mettre en utilisateur
    if current_user != @user       #Avec l'utilisateur actuellement connecté (éditeur)@Si l'utilisateur (l'affiche) est différent
      redirect_to posts_path       #Rediriger vers la page de liste
    end
  end

Comme je l'ai écrit dans le commentaire, cela ressemble à ceci.

Puisqu'il y avait de nombreux articles qui pouvaient être implémentés en collant ceci, j'ai essayé de résumer "pourquoi cela arrive". Nous espérons pour votre référence.

Recommended Posts

[Avec une explication de pourquoi le faire] Comment empêcher les autres de modifier avec l'application CRUD de Rails avec fonction d'authentification
[Explication approximative] Comment séparer le fonctionnement de l'environnement de production et de l'environnement de développement avec Rails
Comment pousser une application développée avec Rails vers Github
Comment empêcher editTextPreference de Android PreferenceFragmentCompat de se rompre
Comment spécifier la base de données lors de la création d'une application avec des rails
Comment empêcher la saisie de dates passées dans les formulaires Rails
[Rails] Comment empêcher la transition d'écran
Comment décorer CSS sur les boutons radio de rails6 form_with (helper)
Comment accéder directement à Socket avec la fonction TCP de Spring Integration
Fonction Strict_loading pour supprimer l'occurrence de problème N + 1 ajoutée à partir des rails 6.1
Comment comparer uniquement le temps avec Rails (de quelle heure à quelle heure, quelque chose comme)
Comment SSH dans Ubuntu à partir d'un terminal avec authentification par clé publique
[Rails] Comment appliquer le CSS utilisé dans l'application principale avec Administrer
Comment mettre en œuvre la fonction d'authentification du courrier au moment de l'inscription de l'utilisateur