49 lines
1.5 KiB
Python
49 lines
1.5 KiB
Python
from django.contrib.admin import AdminSite
|
|
from django.contrib import admin
|
|
from django_celery_beat.models import PeriodicTask, IntervalSchedule, CrontabSchedule, SolarSchedule, ClockedSchedule
|
|
|
|
|
|
class RoleBasedAdminSite(AdminSite):
|
|
site_header = "Tržiště Admin"
|
|
site_title = "Tržiště Admin"
|
|
index_title = "Přehled"
|
|
|
|
def get_app_list(self, request):
|
|
app_list = super().get_app_list(request)
|
|
|
|
if not hasattr(request.user, "role"):
|
|
return []
|
|
|
|
role = request.user.role
|
|
|
|
# define allowed models per role
|
|
role_model_access = {
|
|
"squareManager": ["Square", "Event", "MarketSlot", "Product", "EventProduct"],
|
|
"cityClerk": ["CustomUser", "Event", "MarketSlot", "Reservation", "Product", "EventProduct", "ServiceTicket"],
|
|
# admin will see everything
|
|
}
|
|
|
|
# only restrict if user has limited access
|
|
if role in role_model_access:
|
|
allowed = role_model_access[role]
|
|
|
|
for app in app_list:
|
|
app["models"] = [
|
|
model for model in app["models"]
|
|
if model["object_name"] in allowed
|
|
]
|
|
|
|
return app_list
|
|
|
|
|
|
# Initialize the custom admin site
|
|
custom_admin_site = RoleBasedAdminSite(name='custom_admin')
|
|
|
|
|
|
# # Register your models to the custom admin site
|
|
custom_admin_site.register(PeriodicTask)
|
|
custom_admin_site.register(IntervalSchedule)
|
|
custom_admin_site.register(CrontabSchedule)
|
|
custom_admin_site.register(SolarSchedule)
|
|
custom_admin_site.register(ClockedSchedule)
|