【问题标题】:CanCan Permission for specific resourceCanCan 特定资源的权限
【发布时间】:2013-10-05 17:00:36
【问题描述】:
我的问题:
我得到了三个模型:
用户 注册 课程。
- 一个用户可以是许多课程的成员
- 一个课程有很多成员。
没问题,但现在我想拥有基于Enrollment 的特定权限。
例如我有:
- 用户:
userA
- 两门课程:
courseA 和 courseB
userA 是:
-
courseA 上的成员,角色为student
- 和
courseB 上的成员tutor。
一个普通的学生角色应该只看到课程的内容,一个导师应该有扩展的权限(例如,编辑数据,添加数据......)
我的搜索结果只是我可以将一个用户分配给只有一个角色的课程...
是否有可能触及我的行为?
【问题讨论】:
标签:
ruby-on-rails
authorization
cancan
roles
【解决方案1】:
假设role 是在Enrollment 上定义的,以下应该可以工作:
can :read, Course, enrollment: { user_id: user.id }
can :manage, Course, enrollment: { user_id: user.id, role: "tutor" }
第一条规则捕获任何Enrollment 与用户的id 匹配的Course,允许用户查看它。第二个捕获任何Course,其Enrollment 与用户的id 匹配,并且role 的"tutor"。 (您也可以在第一条规则中指定"student" 的角色,但在这种情况下这可能是不必要的。)
我尚未对此进行测试,您可能希望将实际权限更改为 :read 和 :manage 以外的其他内容,但这应该会让您走上正轨。