0

ユーザー認証にdeviseでrailsを使用しています。新しいユーザー アカウントを作成してログインできます。ただし、アカウントを使用してログインすると、ユーザー URL を変更するだけで他のアカウントにもログインできます。

例: ユーザー 1 として正常にログインすると、http://www.example.com/users/1にリダイレクトされます。URL をhttp://www.example.com/users/2に変更すると、ユーザー 2 などのアカウントの詳細を確認できます。ログインしているユーザーが他のアカウントの詳細にアクセスできないようにするにはどうすればよいですか?

rails 3.2.13 と devise 2.2.3 を使用。

4

3 に答える 3

0

Devise は、承認ではなく、認証のみを処理します。current_user があることを確認しますが、そのユーザーが特定のリソースを見る必要があるかどうかは確認しません。

CanCan のようなものは、万能の承認ソリューションとして優れています。Ruby Toolboxで詳細を確認できます。

しかし、簡単で汚いものについては、users_controller で次のようにすることができます。

before_filter :get_user, :user_views_only_own_records

def get_user
  @user = User.find_by_id(params[:id])
  head :404 if @user.nil?
end

def user_views_only_own_records
  if @user.id != current_user.id
    head :403 # or whatever you want to do when someone tries to peek at another user
  end
end

しかし、ある時点で、管理者が任意のユーザーや他の同様の状況を表示できるようにしたい場合があり、ロールごとに異なるアクセス レベルを定義し始めると、CanCan などを使用して簡単にする必要があります。

于 2013-04-28T18:37:46.000 に答える
0

ユーザーのプロファイル内の情報をインデックス化するprofiles_controllerのようなものがあると仮定すると、次のことができます。

class ProfilesController < ApplicationController
before_filter :authenticate_user! # Provided by Devise
before_filter :find_user      
before_filter :ensure_proper_user

def index
....stuff
end

private
def find_user
   @user = User.find_by_profile_name(params[:profile_name])
end

def ensure_proper_user
  if current_user != @user
    flash[:error] = "You do not have premission to do that."
    redirect_to root_path
  end
end
于 2013-07-20T17:30:41.920 に答える