CanCan的用户授权:NoMethodError

时间:2012-07-02 17:11:00

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.1 authorization cancan

我在我的应用中使用CanCan进行授权。我目前所有的每个用户信息都存储在/ users / 2或users / 3或/ users / 4等等。

我的问题是,当用户登录时,他们只能修改URL并查看其他用户的敏感内容。如何使用CanCan防止用户(比如用户/ 2)看到(用户/ 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

2 个答案:

答案 0 :(得分:2)

您是否尝试将load_and_authorize_resource置于UsersController的顶部?

答案 1 :(得分:2)

我认为你应该使用

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

因此,当用户的ID与当前用户的ID相同时,他们可以管理用户的记录 - 这本身就是? User类没有user_id,这就是它无法启动的原因。