Cancan 2.0 - 限制字段的权限

时间:2012-03-29 13:37:52

标签: ruby-on-rails cancan

我的能力模型中有以下内容:

class Ability
  include CanCan::Ability

  #...

  def superuser_rules 
    can  :access, :items    
    cannot :update, :items
    can :update, :items, :foo_attributes
  end

end

我有一个表单只通过显示foo_attributes嵌套表单来反映它。

但是,在提交表单时,它会拒绝访问以更新项目。

有没有办法绕过这个而不添加新的路线/动作?

非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以创建新的操作来处理这些“特殊属性”。

首先,您可以清除params的特殊属性。

class UserController
  before_filter :only => [:create, :update] { params[:user].delete(:accepted_at) }
end

然后创建一个特殊操作来更改特殊属性:

def accept
  User.find(params[:user_id]).update_attributes :accepted_at => Time.now
end

现在,您可以为createupdateaccept操作设置不同的权限。

class Ability
  include CanCan::Ability

  def initialize(user)
    if user && user.admin?
      can :accept, User
    elsif user
      can :update, User
    end
    can :create, User
  end
end

Take a look at this too