diff --git a/aleksis/apps/alsijil/rules.py b/aleksis/apps/alsijil/rules.py
index 3b4d93f0ff69cf1d08084838aac339cfc36f4c1e..4e7a84f0d973b3c9f35ae967136de0cee1baef59 100644
--- a/aleksis/apps/alsijil/rules.py
+++ b/aleksis/apps/alsijil/rules.py
@@ -246,6 +246,8 @@ add_perm("alsijil.delete_grouprole", delete_group_role_predicate)
 
 view_assigned_group_roles_predicate = group_roles_activated_predicate & (
     is_group_owner
+    | is_lesson_teacher
+    | is_lesson_parent_group_owner
     | has_global_perm("alsjil.assign_grouprole")
     | has_object_perm("alsijil.assign_grouprole")
 )
diff --git a/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html b/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html
index 23c96614dba54513c8c8dc4d033fd10cdc2665d6..f04e06fc317d58d202501ff09ff38a76f1c85e1a 100644
--- a/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html
+++ b/aleksis/apps/alsijil/templates/alsijil/class_register/lesson.html
@@ -111,6 +111,11 @@
                 <a href="#previous-lesson">{% trans "Previous lesson" %}</a>
               </li>
             {% endif %}
+            {% if group_roles %}
+              <li class="tab">
+                <a href="#group-roles">{% trans "Group roles" %}</a>
+              </li>
+            {% endif %}
             <li class="tab">
               <a href="#version-history">{% trans "Change history" %}</a>
             </li>
@@ -257,7 +262,13 @@
                     {% if can_edit_lesson_personalnote %}
                       <tr>
                         {{ form.id }}
-                        <td>{{ form.person_name }}{{ form.person_name.value }}</td>
+                        <td>{{ form.person_name }}{{ form.person_name.value }}
+                          <p>
+                            {% for assignment in form.instance.person.group_roles.all %}
+                              {% include "alsijil/group_role/chip.html" with role=assignment.role %}
+                            {% endfor %}
+                          </p>
+                        </td>
                         <td class="center-align">
                           <label>
                             {{ form.absent }}
@@ -310,7 +321,13 @@
                       </tr>
                     {% else %}
                       <tr>
-                        <td>{{ form.person_name.value }}</td>
+                        <td>{{ form.person_name.value }}
+                          <p>
+                            {% for assignment in form.instance.person.group_roles.all %}
+                              {% include "alsijil/group_role/chip.html" with role=assignment.role %}
+                            {% endfor %}
+                          </p>
+                        </td>
                         <td><i class="material-icons center">{{ form.absent.value|yesno:"check,clear" }}</i></td>
                         <td>
                           <i class="material-icons center">{{ form.late.value|yesno:"check,clear" }}</i>
@@ -338,6 +355,12 @@
           </div>
         {% endif %}
 
+        {% if group_roles %}
+          <div class="col s12" id="group-roles">
+            {% include "alsijil/group_role/partials/assigned_roles.html" with roles=group_roles group=lesson_period.lesson.groups.first back_url=back_url %}
+          </div>
+        {% endif %}
+
         {% if can_view_lesson_documentation %}
           <div class="col s12" id="version-history">
             <div class="card">
diff --git a/aleksis/apps/alsijil/views.py b/aleksis/apps/alsijil/views.py
index 0686554960b77fc82b7dea5aeeb481d0ad2ae6d5..aa60f2cb36830f496906716fbcb7200ef5087a92 100644
--- a/aleksis/apps/alsijil/views.py
+++ b/aleksis/apps/alsijil/views.py
@@ -117,6 +117,11 @@ def lesson(
     context["blocked_because_holidays"] = blocked_because_holidays
     context["holiday"] = holiday
 
+    back_url = reverse(
+        "lesson_by_week_and_period", args=[wanted_week.year, wanted_week.week, lesson_period.pk]
+    )
+    context["back_url"] = back_url
+
     next_lesson = request.user.person.next_lesson(lesson_period, date_of_lesson)
     prev_lesson = request.user.person.previous_lesson(lesson_period, date_of_lesson)
 
@@ -129,6 +134,14 @@ def lesson(
     context["next_lesson"] = lesson_period.next
 
     if not blocked_because_holidays:
+        # Group roles
+        show_group_roles = request.user.person.preferences[
+            "alsijil__group_roles_in_lesson_view"
+        ] and request.user.has_perm("alsijil.view_assigned_grouproles", lesson_period)
+        if show_group_roles:
+            groups = lesson_period.lesson.groups.all()
+            group_roles = GroupRole.objects.with_assignments(date_of_lesson, groups)
+            context["group_roles"] = group_roles
 
         # Create or get lesson documentation object; can be empty when first opening lesson
         lesson_documentation = lesson_period.get_or_create_lesson_documentation(wanted_week)
@@ -143,6 +156,16 @@ def lesson(
             persons = Person.objects.all()
 
         persons_qs = lesson_period.get_personal_notes(persons, wanted_week)
+
+        # Annotate group roles
+        if show_group_roles:
+            persons_qs = persons_qs.prefetch_related(
+                Prefetch(
+                    "person__group_roles",
+                    queryset=GroupRoleAssignment.objects.on_day(date_of_lesson).for_groups(groups),
+                ),
+            )
+
         personal_note_formset = PersonalNoteFormSet(
             request.POST or None, queryset=persons_qs, prefix="personal_notes"
         )