2

アプリでの承認に 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
4

2 に答える 2

2

使うべきだと思います

can :manage, User, :id => user.id

したがって、ユーザーのIDが現在のユーザーのI'dと同じ場合、ユーザーのレコードを管理できます-それは自分自身ですか? User クラスには user_id がないため、最初から機能していませんでした。

于 2012-07-02T21:40:01.303 に答える