diff --git a/aleksis/apps/alsijil/menus.py b/aleksis/apps/alsijil/menus.py
index 2b84cb6f7f70b644a34f79f170dfc4cb6751f773..4ed08937ba4ea9263f7304f627819232ca0abf0f 100644
--- a/aleksis/apps/alsijil/menus.py
+++ b/aleksis/apps/alsijil/menus.py
@@ -16,25 +16,45 @@ MENUS = {
                     "name": _("Current lesson"),
                     "url": "lesson",
                     "icon": "alarm",
-                    "validators": ["menu_generator.validators.is_authenticated"],
+                    "validators": [
+                        (
+                            "aleksis.core.util.predicates.permission_validator",
+                            "alsijil.view_lesson_menu",
+                        ),
+                    ],
                 },
                 {
                     "name": _("Current week"),
                     "url": "week_view",
                     "icon": "view_week",
-                    "validators": ["menu_generator.validators.is_authenticated"],
+                    "validators": [
+                        (
+                            "aleksis.core.util.predicates.permission_validator",
+                            "alsijil.view_week_menu",
+                        ),
+                    ],
                 },
                 {
                     "name": _("Register absence"),
                     "url": "register_absence",
                     "icon": "rate_review",
-                    "validators": ["menu_generator.validators.is_superuser"],
+                    "validators": [
+                        (
+                            "aleksis.core.util.predicates.permission_validator",
+                            "alsijil.view_register_absence",
+                        ),
+                    ],
                 },
                 {
                     "name": _("Personal note filters"),
                     "url": "list_personal_note_filters",
                     "icon": "filter_list",
-                    "validators": ["menu_generator.validators.is_superuser"],
+                    "validators": [
+                        (
+                            "aleksis.core.util.predicates.permission_validator",
+                            "alsijil.view_personal_note_filters",
+                        ),
+                    ],
                 },
             ],
         }
diff --git a/aleksis/apps/alsijil/rules.py b/aleksis/apps/alsijil/rules.py
index 3812aef2ae31ce9da1e95437816d300ed229f613..2c0e000a28a93f7663abcbcc33d64c1c107b6231 100644
--- a/aleksis/apps/alsijil/rules.py
+++ b/aleksis/apps/alsijil/rules.py
@@ -1,12 +1,15 @@
 from rules import add_perm
 
+from aleksis.core.models import Person
 from aleksis.core.util.predicates import (
+    has_any_object,
     has_global_perm,
     has_object_perm,
     has_person,
     is_current_person,
 )
 
+from .models import PersonalNoteFilter
 from .util.predicates import (
     has_lesson_group_object_perm,
     has_person_group_object_perm,
@@ -28,6 +31,9 @@ view_lesson_predicate = has_person & (
 )
 add_perm("alsijil.view_lesson", view_lesson_predicate)
 
+# View lesson in menu
+add_perm("alsijil.view_lesson_menu", has_person)
+
 # View lesson personal notes
 view_lesson_personal_notes_predicate = has_person & (
     has_global_perm("alsijil.view_personalnote")
@@ -73,6 +79,9 @@ view_week_predicate = has_person & (
 )
 add_perm("alsijil.view_week", view_week_predicate)
 
+# View week overview in menu
+add_perm("alsijil.view_week_menu", has_person)
+
 # View week personal notes
 view_week_personal_notes_predicate = has_person & (
     has_global_perm("alsijil.view_personalnote")
@@ -81,6 +90,12 @@ view_week_personal_notes_predicate = has_person & (
 )
 add_perm("alsijil.view_week_personalnote", view_week_personal_notes_predicate)
 
+# View register absence page
+view_register_absence_predicate = has_person & (
+    has_any_object("alsijil.register_absence", Person)
+)
+add_perm("alsijil.view_register_absence", view_register_absence_predicate)
+
 # Register absence
 register_absence_predicate = has_person & (
     has_global_perm("alsijil.register_absence")
@@ -99,10 +114,11 @@ view_full_register_predicate = has_person & (
 add_perm("alsijil.view_full_register", view_full_register_predicate)
 
 # View all personal note filters
-list_personal_note_filters_predicate = has_person & has_global_perm(
-    "alsijil.view_personal_note_filter"
+view_personal_note_filters_predicate = has_person & (
+    has_global_perm("alsijil.view_personalnotefilter")
+    | has_any_object("alsijil.view_personalnotefilter", PersonalNoteFilter)
 )
-add_perm("alsijil.view_personal_note_filters", list_personal_note_filters_predicate)
+add_perm("alsijil.view_personal_note_filters", view_personal_note_filters_predicate)
 
 # Edit personal note filter
 edit_personal_note_filter_predicate = has_person & (