@@ -4,22 +4,34 @@ class Ability
4
4
include CanCan ::Ability
5
5
6
6
def initialize ( user )
7
- # Anyone can view projects not owner by a user or a school.
7
+ define_common_non_student_abilities ( user )
8
+
9
+ return unless user
10
+
11
+ define_authenticated_non_student_abilities ( user )
12
+
13
+ user . schools . each do |school |
14
+ define_school_student_abilities ( user :, school :) if user . school_student? ( school )
15
+ define_school_teacher_abilities ( user :, school :) if user . school_teacher? ( school )
16
+ define_school_owner_abilities ( school :) if user . school_owner? ( school )
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def define_common_non_student_abilities ( user )
23
+ return if user &.student?
24
+
25
+ # Anyone can view projects not owned by a user or a school.
8
26
can :show , Project , user_id : nil , school_id : nil
9
27
can :show , Component , project : { user_id : nil , school_id : nil }
10
28
11
29
# Anyone can read publicly shared lessons.
12
30
can :read , Lesson , visibility : 'public'
31
+ end
13
32
14
- return unless user
15
-
16
- # Any authenticated user can create projects not owned by a school.
17
- can :create , Project , user_id : user . id , school_id : nil
18
- can :create , Component , project : { user_id : user . id , school_id : nil }
19
-
20
- # Any authenticated user can manage their own projects.
21
- can %i[ read update destroy ] , Project , user_id : user . id
22
- can %i[ read update destroy ] , Component , project : { user_id : user . id }
33
+ def define_authenticated_non_student_abilities ( user )
34
+ return if user &.student?
23
35
24
36
# Any authenticated user can create a school. They agree to become the school-owner.
25
37
can :create , School
@@ -34,16 +46,16 @@ def initialize(user)
34
46
can :create_copy , Lesson , visibility : 'public'
35
47
36
48
# Any authenticated user can manage their own lessons.
37
- can %i[ read create_copy update destroy ] , Lesson , user_id : user . id
49
+ can %i[ read create_copy update destroy ] , Lesson , user_id : user . id , school_id : nil
38
50
39
- user . schools . each do |school |
40
- define_school_student_abilities ( user :, school :) if user . school_student? ( school )
41
- define_school_teacher_abilities ( user :, school :) if user . school_teacher? ( school )
42
- define_school_owner_abilities ( school :) if user . school_owner? ( school )
43
- end
44
- end
51
+ # Any authenticated user can create projects not owned by a school.
52
+ can :create , Project , user_id : user . id , school_id : nil
53
+ can :create , Component , project : { user_id : user . id , school_id : nil }
45
54
46
- private
55
+ # Any authenticated user can manage their own projects.
56
+ can %i[ read update destroy ] , Project , user_id : user . id
57
+ can %i[ read update destroy ] , Component , project : { user_id : user . id }
58
+ end
47
59
48
60
def define_school_owner_abilities ( school :)
49
61
can ( %i[ read update destroy ] , School , id : school . id )
@@ -69,7 +81,7 @@ def define_school_teacher_abilities(user:, school:)
69
81
can ( %i[ read ] , :school_owner )
70
82
can ( %i[ read ] , :school_teacher )
71
83
can ( %i[ read create create_batch update ] , :school_student )
72
- can ( %i[ create destroy ] , Lesson ) do |lesson |
84
+ can ( %i[ create update destroy ] , Lesson ) do |lesson |
73
85
school_teacher_can_manage_lesson? ( user :, school :, lesson :)
74
86
end
75
87
can ( %i[ read create_copy ] , Lesson , school_id : school . id , visibility : %w[ teachers students ] )
0 commit comments