Skip to content

Commit af31a30

Browse files
committed
add permission control for general_option & exchange_menu
1 parent eb22d7b commit af31a30

File tree

2 files changed

+32
-21
lines changed

2 files changed

+32
-21
lines changed

adminlteui/admin.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from django.utils.translation import gettext_lazy as _
1111
from django.utils.html import format_html
1212
from django.conf import settings
13-
from django.http.response import HttpResponse
13+
from django.http.response import HttpResponse, HttpResponseForbidden
1414
from adminlteui.widgets import AdminlteSelect
1515
from treebeard.admin import TreeAdmin
1616
from treebeard.forms import movenodeform_factory
@@ -144,6 +144,11 @@ def get_urls(self):
144144
return urls + base_urls
145145

146146
def general_option_view(self, request):
147+
if request.user.has_perm('django_admin_settings.add_options') is False \
148+
and request.user.has_perm(
149+
'django_admin_settings.change_options') is False:
150+
return HttpResponseForbidden(format_html('<h1>403 Forbidden</h1>'))
151+
147152
context = dict(
148153
self.admin_site.each_context(request),
149154
)
@@ -230,6 +235,8 @@ def get_urls(self):
230235
return urls + base_urls
231236

232237
def exchange_menu_view(self, request):
238+
if request.user.has_perm('django_admin_settings.view_menu') is False:
239+
return HttpResponseForbidden(format_html('<h1>403 Forbidden</h1>'))
233240
if request.is_ajax():
234241
response_data = dict()
235242
response_data['message'] = 'success'
@@ -244,12 +251,14 @@ def exchange_menu_view(self, request):
244251
if not use_custom_menu or use_custom_menu.option_value == '0':
245252
use_custom_menu.option_value = '1'
246253
use_custom_menu.save()
247-
messages.add_message(request, messages.SUCCESS, _('Menu exchanged, current is `custom menu`.'))
254+
messages.add_message(request, messages.SUCCESS, _(
255+
'Menu exchanged, current is `custom menu`.'))
248256

249257
else:
250258
use_custom_menu.option_value = '0'
251259
use_custom_menu.save()
252-
messages.add_message(request, messages.SUCCESS, _('Menu exchanged, current is `system menu`.'))
260+
messages.add_message(request, messages.SUCCESS, _(
261+
'Menu exchanged, current is `system menu`.'))
253262
return HttpResponse(json.dumps(response_data),
254263
content_type="application/json,charset=utf-8")
255264
return HttpResponse('method not allowed.')

adminlteui/templatetags/adminlte_menu.py

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ def get_custom_menu(request):
4242
:return:
4343
"""
4444
all_permissions = request.user.get_all_permissions()
45-
45+
print(all_permissions)
4646
limit_for_internal_link = []
4747
for permission in all_permissions:
4848
app_label = permission.split('.')[0]
@@ -75,7 +75,8 @@ def get_custom_menu(request):
7575
if children_item.get('data').get('link_type') == 0:
7676
# internal link should connect a content_type, otherwise it will be hide.
7777
if children_item.get('data').get('content_type'):
78-
obj = ContentType.objects.get(id=children_item.get('data').get('content_type'))
78+
obj = ContentType.objects.get(
79+
id=children_item.get('data').get('content_type'))
7980
# if user hasn't permission, the model will be skip.
8081
if obj.app_label + ':' + obj.model not in limit_for_internal_link:
8182
continue
@@ -134,22 +135,23 @@ def get_menu(context, request):
134135

135136
for app in available_apps:
136137
if app.get('app_label') == 'django_admin_settings':
137-
app.get('models').insert(0,
138-
{
139-
'name': _('General Option'),
140-
'object_name': 'Options',
141-
'perms':
142-
{
143-
'add': True,
144-
'change': True,
145-
'delete': True,
146-
'view': True
147-
},
148-
'admin_url': reverse(
149-
'admin:general_option'),
150-
'view_only': False
151-
}
152-
)
138+
if request.user.has_perm('django_admin_settings.add_options') or \
139+
request.user.has_perm(
140+
'django_admin_settings.change_options'):
141+
app.get('models').insert(0, {
142+
'name': _('General Option'),
143+
'object_name': 'Options',
144+
'perms':
145+
{
146+
'add': True,
147+
'change': True,
148+
'delete': True,
149+
'view': True
150+
},
151+
'admin_url': reverse(
152+
'admin:general_option'),
153+
'view_only': False
154+
})
153155
# return MenuManager(available_apps, context, request)
154156
return available_apps
155157

0 commit comments

Comments
 (0)