Skip to content

Commit 8887b05

Browse files
committed
Added permissions_check parameter to generic ItemBuilder
Now check for permissions can be done for generic items in menu. If user doesn't have permissions for such entry, it won't be displayed for him.
1 parent 800a9b5 commit 8887b05

File tree

3 files changed

+21
-8
lines changed

3 files changed

+21
-8
lines changed

README.rst

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,9 @@ element.
7272
``ItemBuilder``
7373
***************
7474

75-
Builder that represents simple url. ``name`` argument is required. ``url`` argument is required.
75+
Builder that represents simple url. ``name`` argument is required. ``url`` argument is required. It also can take
76+
``permissions_check`` that should be either callable or dotted path to callable that will return True or False
77+
determining if user can see this option in menu. It should take ``request``, ``context`` and ``menu_name`` parameters.
7678

7779
``ModelBuilder``
7880
****************

admin_toolbox/sidebar/builders/generic.py

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,29 @@ class ItemBuilder(BaseBuilder):
1111
Simple manual element builder. You have to specify url and name of element. You can specify icon. If icon is not
1212
provided, will fallback to default one (determined by how much item is nested).
1313
"""
14-
def __init__(self, url, name, icon=None, *args, **kwargs):
14+
def __init__(self, url, name, icon=None, permissions_check=None, *args, **kwargs):
1515
super(ItemBuilder, self).__init__(*args, **kwargs)
1616
self.url = url
1717
self.name = name
1818
self.icon = icon
19+
if isinstance(permissions_check, string_types):
20+
self.permissions_check = import_string(permissions_check)
21+
else:
22+
self.permissions_check = permissions_check
23+
24+
def check_permissions(self, request=None, context=None, menu_name='default'):
25+
if self.permissions_check is None:
26+
return True
27+
28+
return self.permissions_check(request, context, menu_name)
1929

2030
def build(self, request=None, context=None, menu_name='default'):
21-
return {
22-
'url': self.url,
23-
'name': self.name,
24-
'icon': self.icon,
25-
}
31+
if self.check_permissions(request, context, menu_name):
32+
return {
33+
'url': self.url,
34+
'name': self.name,
35+
'icon': self.icon,
36+
}
2637

2738

2839
class ListBuilder(BaseBuilder):

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
setup(
1919
name='django-admin-toolbox',
2020

21-
version='1.0.0.dev14',
21+
version='1.0.0.dev15',
2222

2323
description='Django admin toolbox - bunch of improvements for default django admin',
2424
long_description=long_description,

0 commit comments

Comments
 (0)