アプリでの承認に CanCan を使用しています。現在、各ユーザーの情報はすべて /users/2 または users/3 または /users/4 などに保存されています。
私の問題は、ユーザーがログインすると、URL を修正するだけで、他のユーザーの機密コンテンツを表示できることです。CanCan を使用して、ユーザー (users/2 など) が (users/3) を表示できないようにするにはどうすればよいですか?
ユーザーコントローラーに「load_and_authorize_resource」を追加すると、次のエラーが発生します。
NoMethodError in UsersController#show
undefined method `user_id' for #<User:0x007fee61e90b90>
モデル
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :admin
can :manage, :all
can :access, :rails_admin
can :dashboard
else
can :manage, User, :user_id => user.id
end
コントローラー
class ApplicationController < ActionController::Base
protect_from_forgery
rescue_from CanCan::AccessDenied do |exception|
redirect_to root_path, :alert => exception.message
end
class UsersController < ApplicationController
before_filter :authenticate_user!
load_and_authorize_resource
def show
@user = User.find(params[:id])
@date = params[:month] ? Date.parse("#{params[:month]}-01") : Date.today
@occasions = @user.occasions.page(params[:page]).per(5)
end