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