Devise&CanCan – CanCan 2.0 API的问题

我想为我的用户模型添加其他属性,并且不希望创建单独的配置文件模型。 我正在尝试使用RESTful操作集中的标准«更新»来更新自定义字段:

class UsersController < ApplicationController before_filter :authenticate_user! # ... def update @user = User.find(params[:id]) authorize! :update, @user respond_to do |format| if @user.update_attributes(params[:user]) format.html { redirect_to @user, notice: 'User was successfully updated.' } format.json { head :ok } else format.html { render action: "edit" } format.json { render json: @user.errors, status: :unprocessable_entity } end end end end 

这一切都很顺利,除了current_user能够更新任何用户的个人资料。 看来我不能限制任何用户操作。 我试过了:

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

 cannot :update, User # at all 

没有运气。 使用Devise 1.5.0和CanCan 2.0.0.alpha

这是我的能力.rb

 class Ability include CanCan::Ability def initialize(user) user ||= User.new(:role => nil) # guest user (not logged in) can :access, :all if user.admin? can :manage, :all else can :read, Review if user.customer? can :update, User, :id => user.id can [:create, :update, :destroy], Review, :user_id => user.id end end end end 

代码对我来说很好。 如果您首先尝试简化第二个条件并取出客户条件,该怎么办? 也许可以拿出“可以:访问,:全部

就像是:

 class Ability include CanCan::Ability def initialize(user) user ||= User.new(:role => nil) # guest user (not logged in) if user.admin? can :access, :all else can :read, :all can :update, :users, :id => user.id can [:create, :update, :destroy], :reviews, :user_id => user.id end end end 

您的限制是否适用于评论(该用户只能编辑自己的评论)? 我有一个类似的能力文件,但我总是使用一个单独的配置文件模型..