Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1fb3f15

Browse files
authored
Only show editable dashboards in admin changelist view. (#131)
Thanks, Atul Varma
1 parent e82f8a6 commit 1fb3f15

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

django_sql_dashboard/admin.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,3 +62,10 @@ def get_readonly_fields(self, request, obj):
6262
if not request.user.is_superuser:
6363
readonly_fields.append("owned_by")
6464
return readonly_fields
65+
66+
def get_queryset(self, request):
67+
if request.user.is_superuser:
68+
# Superusers should be able to see all dashboards.
69+
return super().get_queryset(request)
70+
# Otherwise, show only the dashboards the user has edit access to.
71+
return Dashboard.get_editable_by_user(request.user)

django_sql_dashboard/models.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,21 @@ def user_can_edit(self, user):
103103
return True
104104
return False
105105

106+
@classmethod
107+
def get_editable_by_user(cls, user):
108+
allowed_policies = [cls.EditPolicies.LOGGEDIN]
109+
if user.is_staff:
110+
allowed_policies.append(cls.EditPolicies.STAFF)
111+
if user.is_superuser:
112+
allowed_policies.append(cls.EditPolicies.SUPERUSER)
113+
return (
114+
cls.objects.filter(
115+
models.Q(owned_by=user)
116+
| models.Q(edit_policy__in=allowed_policies)
117+
| models.Q(view_policy=cls.EditPolicies.GROUP, edit_group__user=user)
118+
)
119+
).distinct()
120+
106121
@classmethod
107122
def get_visible_to_user(cls, user):
108123
allowed_policies = [cls.ViewPolicies.PUBLIC, cls.ViewPolicies.LOGGEDIN]

0 commit comments

Comments
 (0)