74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
import logging
|
|
|
|
from django.contrib.auth.decorators import login_required
|
|
from django.shortcuts import render
|
|
|
|
from core.decorators import log_url
|
|
from perms.models import Perm
|
|
|
|
from dashboard.models import DashboardLayout
|
|
from dashboard.widgets.widgets import FEATURES_MAP, get_widget_type_with_perms_map
|
|
from dashboard.widgets.widgets import get_widget_list_from_user
|
|
from license_info.tools import check_features
|
|
|
|
_log = logging.getLogger()
|
|
|
|
|
|
@log_url
|
|
@login_required
|
|
def dashboard(request):
|
|
""" User's dashboard """
|
|
# If there is no default layout for this user, create one.
|
|
layout = DashboardLayout.objects.get_or_create(
|
|
user=request.user
|
|
)
|
|
check_user_widgets(request.user)
|
|
check_license_widgets()
|
|
widgets_list = get_widget_list_from_user(request.user)
|
|
form = AddWidgetForm(request.user)
|
|
context = {'widgets': widgets_list,
|
|
'form': form,
|
|
'layout_id': layout[0].id}
|
|
return render(request, 'dashboard/dashboard.html', context)
|
|
|
|
|
|
def check_user_widgets(user):
|
|
"""
|
|
Check user perms for watching widgets
|
|
|
|
If the user had rights to view widgets, and then they were removed, and the user already pressed these widgets,
|
|
then after checking, the widgets will be removed from the panel."
|
|
|
|
@param user: A user who wants to view widgets
|
|
|
|
"""
|
|
|
|
if user.is_superuser:
|
|
return
|
|
widgets = DashboardLayout.objects.get(user=user)
|
|
if not widgets:
|
|
return
|
|
|
|
type_perms_map = get_widget_type_with_perms_map()
|
|
allowed_widgets = []
|
|
for widget in widgets.widgets:
|
|
need_perms = type_perms_map[widget['id']]
|
|
if all([user.has_perm(Perm.perm_req(perm)) for perm in need_perms]):
|
|
allowed_widgets.append(widget)
|
|
widgets.widgets = allowed_widgets
|
|
widgets.save()
|
|
|
|
|
|
def check_license_widgets():
|
|
"""Check if we need to hide some widgets due to license restrictions"""
|
|
|
|
dashboards = DashboardLayout.objects.all()
|
|
for cur in dashboards:
|
|
widgets_ids = [x['id'] for x in cur.widgets]
|
|
|
|
for feature, bad_widgets in FEATURES_MAP.items():
|
|
if not check_features([feature]):
|
|
if set(bad_widgets) & set(widgets_ids):
|
|
allowed_widgets = [wg for wg in cur.widgets if wg["id"] not in bad_widgets]
|
|
cur.widgets = allowed_widgets
|
|
cur.save()
|