Je viens de commencer Rails 3. J'ai généré le code ci-dessous en utilisant l'échafaudage de Rails 3 sur une table appelée "Logs".Restriction de la manipulation d'url pour retourner d'autres enregistrements utilisateur
La fonction 'index' ci-dessous fournit uniquement les enregistrements associés à current_user.id (à partir de la session stockée dans la table de session). Les utilisateurs uniquement les enregistrements sont présentés avec l'itinéraire suivant est enregistré en tant qu'utilisateur = 3 (voir code index ci-dessous)
localhost: 3000/logs
Problème: En tant qu'utilisateur, je peux voir un record qui n'est pas mon record (étant user = 3) en éditant l'URL manuellement pour montrer tout autre document:
localhost: 3000/logs/5 'a été créé par ce user.id = 2'
Recherche de solution: Comment empêcher le piratage manuel de l'URL pour empêcher un utilisateur de consulter d'autres enregistrements utilisateur?
classe LogsController < ApplicationController
before_filter: login_required
def index @logs = Log.where(:user_id => current_user) respond_to do |format| format.html # index.html.erb format.xml { render :xml => @logs } end
S'il vous plaît ignorer que la nouvelle fonction est absente de la fonction de création ci-dessous. Le code ci-dessous est de montrer simplement que je mets le user_id dans la section « Journaux » Table
def create @log = Log.new(params[:log]) @log.user_id = current_user.id respond_to do |format| if @log.save format.html { redirect_to(@log)} format.xml { render :xml => @log, :status => :created, :location => @log } else format.html { render :action => "new" } format.xml { render :xml => @log.errors, :status => :unprocessable_entity } end end
Merci beaucoup pour la recommandation ACL. L'authentification est évidemment différente de l'autorisation. Toujours dans mon enfance avec Rails et tout ce que j'ai l'air de lire est flou entre la syntaxe de Ruby et la syntaxe de Rails. J'ai testé votre code et cela fonctionne en empêchant la manipulation de l'url. Lors de la manipulation de l'URL, il présente uniquement les enregistrements des utilisateurs. Cependant, j'ai remarqué que l'erreur de flash ne se produira jamais. – fresh
Désolé, je vois maintenant "Non autorisé" lors de la migration de l'URL. Merci encore pour votre temps. – fresh
Vous avez raison, je voulais dire l'autorisation, désolé de mélanger cela. Le message flash n'est pas affiché? Vous avez besoin d'une instruction dans votre vue qui génère des messages si présents. Je ne sais pas si le générateur le crée automatiquement. –