diff --git a/aleksis/core/preferences.py b/aleksis/core/preferences.py index ad90929ef8f4332daf50ef3485b47383f79a9dea..9c81cf4c82fe573ba8787d309b0d4bbfba1751ff 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 fb8845abef6fa276e1671a3a78dbd8182e001e7f..cf29b8790a310573d4719f89230a200850ea9bc8 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 3aa8fa72f0de38298b56ef487fa3bea1f0a32cc8..b9d7d502cdfee47f2490650d3822d661e4abf314 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: