2017-02-19 11 views
0

誰かが助けることができるのだろうかと思います。私は管理者ユーザーだけがユーザーインデックスを見ることができるはずのアプリの現在のセットアップの下にあります。これはうまくいきます。また、管理者以外のユーザーもrootにリダイレクトされます。これもうまくいきます(ユーザープロファイルにリダイレクトしたいのですが)Railsにはアクションの前に管理者のアクセスが含まれています

実際の問題は、管理者ユーザーが任意のユーザープロファイルページにアクセスできるようにすることですユーザーはインデックスページのリンクからアクセスできますが、現時点では自分のページにアクセスできます。これは、アクションリストの前の正しいユーザが:show

私はshow_actionを ':admin_user before action'に追加しようとしましたが、役に立たないようです。どのようにこれを修正するための任意の提案は非常に感謝します。

多くのおかげ

users_controller.rb

class UsersController < ApplicationController 
    before_action :logged_in_user, only: [:edit, :update, :show] 
    before_action :correct_user, only: [:edit, :update, :show] 
    before_action :admin_user, only: [:index] 

定義correct_user

def correct_user 
    @user = User.find(params[:id]) 
    redirect_to(root_url) unless current_user?(@user) 
end 

定義ADMIN_USER

def admin_user 
    if current_user.admin? 
    flash.now[:success] = "Admin Access Granted" 
    else 
    redirect_to root_path 
    end 
end 

SESSIONS- sessions_helper.rb

はあなたがほぼ完了しているCURRENT_USER

def current_user?(user) 
    user == current_user 
    end 

def current_user 
    @current_user ||= User.find_by(id: session[:user_id]) 
end 

答えて

1

を定義します!ただ、現在のユーザーは、ユーザーのリソースを要求する1でない限り、あなたのコードは、現在のルートにリダイレクト

def correct_user 
    @user = User.find(params[:id]) 
    redirect_to(root_url) unless current_user?(@user) || current_user.admin? 
end 

correct_userにこれを追加し、単にユーザー自身のプロファイルにリダイレクトするように、さらにUser#admin?

unless声明を拡張、変更correct_user年代には、このになるために声明をリダイレクト:ユーザーであれば行うには

def correct_user 
    @user = User.find(params[:id]) 
    redirect_to user_path(@user) unless current_user?(@user) || current_user.admin? 
end 
+1

申し訳ありませんが、私はあなたの管理者はユーザ#管理者 'への対応User'オブジェクト'であることを認識していなかった? '、私の答えに更新、私はそれに旋回を与えてみましょうこんなに早く返信 – amingilani

+0

おかげで、それは完璧な理にかなっていますしかし、それが他のコードとの競合や問題を特定しているかどうかを確認することができます。指が交差した。 –

-1

最も簡単な方法は、論理的な例外に追加されます管理者私は皆、あなたのルートで教育された推測を行い、ルートの代わりに現在のユーザープロファイルページにリダイレクトしました。

def correct_user 
    @user = User.find(params[:id]) 
    redirect_to(user_path(current_user)) unless (current_user?(@user) && current_user.admin?) 
end 
+0

'unless'ステートメントを使用しているので、' current_user.admin? 'ステートメントの前にbang(!)は必要ありません。 – amingilani

+0

ありがとう、私はそれをifステートメントに切り替えましたが、間違いは明らかでした。 –

関連する問題