我正在建立一个学校系统,教师可以在其中管理各自学校范围内的教室。
我有以下匹配的能力设置:
class Ability
include CanCan::Ability
#define the user ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.has_role? :instructor
can :manage, Classroom do |classroom|
classroom.new_record? && classroom.school_id == user.school_id || classroom.instructor == user
end
end
end
end
从理论上讲,这应该使教师能够管理与教师设置无关的新记录,只要教师和新教室都属于同一所学校。
在我的课堂新动作中,我从父学校构建教室以适应这种情况@classroom = @school.classrooms.build
。这将使用 school_id 初始化新的教室记录,从而使教师能够管理该记录。然而,在我的教室控制器中,我调用load_and_authorize_resource
了在学校与教室关系建立之前授权教师并引发 CanCan 授权异常。
有没有办法解决?