带有STI的Cancancan宝石

时间:2018-01-27 09:12:24

标签: ruby-on-rails-5 sti cancancan

我正在尝试在我的rails应用中为单表继承实现cancancan gem。以下是STI的表格结构:

User model
Class User < ApplicationRecord
end

Teacher Model
Class Teacher < User
has_many :students, class_name: "User", foreign_key: "teacher_id" 
end

Student Model
class Student < User
belongs_to :teacher, class_name: "User", foreign_key: "teacher_id"
end

以下是我的能力模型:

class Ability
  include CanCan::Ability

   def initialize(user)
    if user.present?
      if user.type == "Student"
        can :manage, Student
      end

      if user.type == "Teacher"
        can :manage, Teacher
      end

      if user.type == "Teacher"
       can :read, Student, coach_id: user.id
      end
    end
  end
end
  

如果user.type ==“学生”    可以:管理,学生   端

这用于防止教师访问学生的页面。

  

如果user.type ==“老师”    可以:管理,老师   端

这用于防止学生访问教师页面。

现在,根据我的理解,下面的代码应该可以访问属于特定教师的学生资料页面。

if user.type == "Teacher"
  can :read, Student, coach_id: user.id
end

但是,当我尝试访问不属于登录教师帐户的学生的网址时,我仍然可以访问该网页。我想这个页面应该重定向到教师的个人资料页面。

以下是我为拒绝访问重定向所写的内容:

  rescue_from CanCan::AccessDenied do | exception |
    redirect_to user.type == "Teacher" ? teacher_profiles_path : stduent_profiles_path, alert: exception.message
  end

我希望我能够解释整个场景。但是如果您需要一些额外的信息,请告诉我。

任何肝脏将不胜感激。提前致谢。 :)

0 个答案:

没有答案