CanCan特定资源的权限

时间:2013-09-29 22:13:39

标签: ruby-on-rails authorization cancan roles

我的问题: 我有三个型号:

  

用户< - >注册< - >课程。

  1. 用户可以是许多课程的成员
  2. 课程有很多成员。
  3. 这没问题,但现在我希望拥有基于Enrollment的特定权限。

    例如我有:

    1. 用户:userA
    2. 两门课程:courseAcourseB
    3. userA是:

      • courseA上有student
      • 的成员
      • courseB上的成员tutor

      普通学生角色应该只看到课程内容,导师应该具有扩展权限(例如,编辑数据,添加数据......)

      我的搜索结果只是我可以将用户分配给只有一个角色的课程......

      有可能达到我的行为吗?

1 个答案:

答案 0 :(得分:0)

假设在role上定义了Enrollment,则以下内容应该有效:

can :read, Course, enrollment: { user_id: user.id }
can :manage, Course, enrollment: { user_id: user.id, role: "tutor" }

第一条规则会捕获与用户的Course匹配的Enrollment的任何id,允许用户查看它。第二个捕获Course,其中Enrollment与用户的id匹配,role"tutor"匹配。 (您也可以在第一条规则上指定"student"的角色,但在这种情况下可能没有必要。)

我尚未对此进行测试,您可能希望将实际权限更改为:read:manage以外的其他权限,但这样可以让您走上正确的道路。