ユーザーが自分のアカウントに読み取り専用アクセスできる「キーホルダー」を指名できるアプリを作成したいと考えています。ユーザー認証にDeviseを使用しています。さらに、ログインしているユーザーがキーホルダーであるかどうかを判断するためのブール値フィールドがデータベースにあり、アクセスが許可されているユーザーのユーザー ID に等しい「access_id」整数フィールドもあります。
ユーザーまたはそのキー所有者のみが自分のアカウントにアクセスできるようにアクセス制限を作成しようとしています (アドレスバーにユーザー番号を入力する人だけではありません)。後でユーザー ロールに基づいてさらにアクセスを制限しますが、現在次のエラーが発生しています。
ActiveRecord::RecordNotFound in UsersController#myaccount
Couldn't find User without an ID
これは、私が application_controller.rb に追加した次のコードを参照しています。
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :correct_user
private
def correct_user
@user = User.find(params[:id])
@keyholder = User.find(params[:access_id])
redirect_to(root_path) unless current_user==@user||@keyholder
end
end
この行のエラーが発生しています:
@keyholder = User.find(params[:access_id])
また、ユーザー コントローラーの #myaccount アクションのコードは次のとおりです。
def myaccount
if user_signed_in?
@user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @user }
end
else
redirect_to root_path, notice: 'Please login to view your account'
end
end
データベース内のすべてのレコードの access_id を 0 に設定しています。
誰でもこれで私を助けることができますか?アクセス許可をさらに制限する前に、適切なユーザーがアカウントにアクセスできるようにしたいだけです。ありがとう!!
アップデート:
コードを次のように変更すると:
def correct_user
@user = User.find(params[:id])
redirect_to(root_path) unless current_user==@user
end
ユーザーは自分のアカウントにしかアクセスできませんが、これは問題ありませんが、キーホルダーがアカウントにアクセスできる方法が必要です。