From e94f208fba9c94c0c5e867c31cc31f1643ddc517 Mon Sep 17 00:00:00 2001
From: magicfelix <felix@felix-zauberer.de>
Date: Sat, 6 Mar 2021 11:15:03 +0100
Subject: [PATCH] Show default dashboard to anonymous users, if configured

---
 aleksis/core/preferences.py | 9 +++++++++
 aleksis/core/rules.py       | 4 +++-
 aleksis/core/views.py       | 5 +++--
 3 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py
index ad90929ef..9c81cf4c8 100644
--- a/aleksis/core/preferences.py
+++ b/aleksis/core/preferences.py
@@ -252,3 +252,12 @@ class DataChecksEmailsRecipientGroups(ModelMultipleChoicePreference):
     default = []
     model = Group
     verbose_name = _("Email recipient groups for data checks problem emails")
+
+
+@site_preferences_registry.register
+class AnonymousDashboard(BooleanPreference):
+    section = general
+    name = "anonymous_dashboard"
+    default = False
+    required = False
+    verbose_name = _("Show dashboard to users without login")
diff --git a/aleksis/core/rules.py b/aleksis/core/rules.py
index fb8845abe..cf29b8790 100644
--- a/aleksis/core/rules.py
+++ b/aleksis/core/rules.py
@@ -9,12 +9,14 @@ from .util.predicates import (
     is_current_person,
     is_group_owner,
     is_notification_recipient,
+    is_site_preference_set,
 )
 
 rules.add_perm("core", rules.always_allow)
 
 # View dashboard
-rules.add_perm("core.view_dashboard", has_person)
+view_dashboard_predicate = is_site_preference_set("general", "anonymous_dashboard") | has_person
+rules.add_perm("core.view_dashboard", view_dashboard_predicate)
 
 # View notifications
 rules.add_perm("core.view_notifications", has_person)
diff --git a/aleksis/core/views.py b/aleksis/core/views.py
index 3aa8fa72f..b9d7d502c 100644
--- a/aleksis/core/views.py
+++ b/aleksis/core/views.py
@@ -54,6 +54,7 @@ from .models import (
     DashboardWidget,
     DashboardWidgetOrder,
     DataCheckResult,
+    DummyPerson,
     Group,
     GroupType,
     Notification,
@@ -75,7 +76,7 @@ from .tables import (
 )
 from .util import messages
 from .util.apps import AppConfig
-from .util.core_helpers import objectgetter_optional
+from .util.core_helpers import has_person, objectgetter_optional
 from .util.forms import PreferenceLayout
 
 
@@ -99,7 +100,7 @@ def index(request: HttpRequest) -> HttpResponse:
     context["notifications"] = notifications
     context["unread_notifications"] = unread_notifications
 
-    announcements = Announcement.objects.at_time().for_person(request.user.person)
+    announcements = Announcement.objects.at_time().for_person(person)
     context["announcements"] = announcements
 
     if len(widgets) == 0:
-- 
GitLab