我正在构建一个学校系统,教师可以在各自学校的范围内管理教室。
我有以下匹配的能力设置:
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 初始化新的类记录,使教师能够管理该记录。但是,在我的教室 Controller 中,我调用 load_and_authorize_resource
,它会在建立学校与教室关系并引发 CanCan 授权异常之前对教师进行授权。
有什么办法可以解决这个问题吗?
最佳答案
CanCan 可能会在与学校建立关联之前检查能力。您可以明确地分解创建和管理权限:
can :create, Classroom
can :manage, Classroom, instructor_id: user.id
然后在验证中检查教室是否属于教师的学校。
关于ruby-on-rails-3 - Rails 3 CanCan 授权范围所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13463380/