ruby-on-rails-3 - Rails 3 CanCan 授权范围所有权

标签 ruby-on-rails-3 devise cancan before-filter

我正在构建一个学校系统,教师可以在各自学校的范围内管理教室。

我有以下匹配的能力设置:

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/

相关文章:

ruby-on-rails - API 中未初始化的常量 SessionsController

ruby-on-rails - Cancan 不显示授权的 View 元素

ruby-on-rails - 让用户使用 CanCan 和 Devise 更新自己的帖子

ruby-on-rails - 为什么 GC 执行频繁发生并且在我的 Ruby Rails 上用 REE 部署花费太长时间?

ruby-on-rails - 延迟发送邮件以延长页面加载时间

ruby-on-rails - 带有 Devise 的 JSON Web token

ruby-on-rails - 我可以在表单输入集合中通过 CanCan 使用授权吗?

ruby-on-rails-3 - default_url_options 和rails 3

ruby - Rails PostgreSQL 使用 LIKE 进行不区分大小写的搜索

ruby-on-rails - 没有路由匹配 [POST] "/sessions/user"