2013-09-29 4 views
0

Моей проблему: я получил три модели:CanCan Разрешения на конкретный ресурс

< пользователя -> Учащихся < -> Курса.

  1. пользователь может быть членом многих курсов
  2. Курс имеет много членов.

Это не проблема, но теперь я хочу иметь конкретные разрешения на основе Enrollment.

Например, у меня есть:

  1. пользователь: userA
  2. два курсы: courseA и courseB

userA является:

  • член на courseA с ролью student
  • и член на courseB как tutor.

Нормальный студент роль должна видеть только содержание курса, воспитатель должен расширить привилегии (например, редактировать данные, добавлять данные ...)

Мои результаты по поиску только что я могу назначить пользователя на курс только с ОДНОЙ ролью ...

Есть ли возможность достичь моего поведения?

ответ

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 , но это должно привести вас к правильному пути.

Смежные вопросы