我的能力模型中有以下内容:
class Ability
include CanCan::Ability
#...
def superuser_rules
can :access, :items
cannot :update, :items
can :update, :items, :foo_attributes
end
end
我有一个表单只通过显示foo_attributes嵌套表单来反映它。
但是,在提交表单时,它会拒绝访问以更新项目。
有没有办法绕过这个而不添加新的路线/动作?
非常感谢!
答案 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
现在,您可以为create
,update
和accept
操作设置不同的权限。
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