对于名为Notes的多态模型,CanCan能力存在问题。用户可以向当前客户和潜在员工添加注释。每个人都可以访问当前的客户,但只有招聘团队才能查看潜在的员工。 问题在于
cannot :manage, Recruit
在员工的能力档案中,他们突然无法向他们有权访问的客户添加备注。 在recruit.rb和client.rb类中的Notes关联代码:
has_many :notes, -> { order "notes.updated_at DESC" }, as: :noteable, dependent: :destroy
accepts_nested_attributes_for :notes, :reject_if => :all_blank, allow_destroy:true
notes_controller.rb
load_and_authorize_resource :recruit
load_and_authorize_resource :client
load_and_authorize_resource :note, :through => [:recruit, :client]
ability.rb
if user.has_role? :staff
can :manage, :all
cannot :manage, Recruit
end
if user.has_role? :admin
can :manage, :all
end
据我所知,没有其他人有这个错误。这是一个有趣的行为。该应用程序不会授权任何笔记,因为用户无权在所有可添加的笔记上添加笔记。
编辑:
我尝试过的事情,但都失败了。
notes_controller.rb:
移除load_and_authorize :recruit
和through => :recruit
这可以让员工为他们的可访问模型添加注释,但是删除了管理员为新员工添加注释的能力。
ability.rb:
将can :manage, Note, noteable_type: 'Recruit'
添加到文件的管理部分不会恢复此功能。