Skip to content

Commit 927a545

Browse files
LBegnaudcimnine
authored andcommitted
adjust groups and users startup scripts to allow custom codename filter
1 parent 0574ffc commit 927a545

File tree

4 files changed

+52
-21
lines changed

4 files changed

+52
-21
lines changed

initializers/groups.yml

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,16 @@
77
# writers:
88
# users:
99
# - writer
10+
## specify explicit permission codenames or codename filter functions and filters to match on
1011
# permissions:
11-
# - add_device
12-
# - change_device
1312
# - delete_device
14-
# - add_virtualmachine
15-
# - change_virtualmachine
1613
# - delete_virtualmachine
14+
# - codename__startswith:
15+
# - add_
16+
# - change_
17+
# vm_managers:
18+
# - codename__endswith:
19+
# - _virtualmachine
20+
# creators:
21+
# - codename__startswith:
22+
# - add_

initializers/users.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,10 @@
44
# password: reader
55
# writer:
66
# password: writer
7+
## specify explicit permission codenames or codename filter functions and filters to match on
78
# permissions:
8-
# - add_device
9-
# - change_device
109
# - delete_device
11-
# - add_virtualmachine
12-
# - change_virtualmachine
1310
# - delete_virtualmachine
11+
# - codename__startswith:
12+
# - add_
13+
# - change_

startup_scripts/000_users.py

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,23 @@
2525
if user_details.get('api_token', 0):
2626
Token.objects.create(user=user, key=user_details['api_token'])
2727

28-
user_permissions = user_details.get('permissions', [])
29-
if user_permissions:
30-
user.user_permissions.clear()
31-
for permission_codename in user_details.get('permissions', []):
32-
for permission in Permission.objects.filter(codename=permission_codename):
33-
user.user_permissions.add(permission)
34-
user.save()
28+
yaml_permissions = user_details.get('permissions', [])
29+
permission_object = user
30+
if yaml_permissions:
31+
permission_object.permissions.clear()
32+
for yaml_permission in yaml_permissions:
33+
if isinstance(yaml_permission,dict):
34+
# assume this is the specific codename filter function instead of an exact codename
35+
permission_codename_function = list(yaml_permission.keys())[0]
36+
permission_codenames = yaml_permission[permission_codename_function]
37+
else:
38+
permission_codename_function = 'codename'
39+
permission_codenames = list({yaml_permission})
40+
41+
# supports either one codename from the permissions list, or multiple codenames in a codename_function dict
42+
for permission_codename in permission_codenames:
43+
# supports non-unique permission codenames
44+
for permission in eval('Permission.objects.filter(' + permission_codename_function + '=permission_codename)'):
45+
permission_object.permissions.add(permission)
46+
47+
permission_object.save()

startup_scripts/010_groups.py

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,21 @@
2424
if user:
2525
user.groups.add(group)
2626

27-
group_permissions = group_details.get('permissions', [])
28-
if group_permissions:
29-
group.permissions.clear()
30-
for permission_codename in group_details.get('permissions', []):
31-
for permission in Permission.objects.filter(codename=permission_codename):
32-
group.permissions.add(permission)
27+
yaml_permissions = group_details.get('permissions', [])
28+
permission_object = group
29+
if yaml_permissions:
30+
permission_object.permissions.clear()
31+
for yaml_permission in yaml_permissions:
32+
if isinstance(yaml_permission,dict):
33+
# assume this is the specific codename filter function instead of an exact codename
34+
permission_codename_function = list(yaml_permission.keys())[0]
35+
permission_codenames = yaml_permission[permission_codename_function]
36+
else:
37+
permission_codename_function = 'codename'
38+
permission_codenames = list({yaml_permission})
39+
40+
# supports either one codename from the permissions list, or multiple codenames in a codename_function dict
41+
for permission_codename in permission_codenames:
42+
# supports non-unique permission codenames
43+
for permission in eval('Permission.objects.filter(' + permission_codename_function + '=permission_codename)'):
44+
permission_object.permissions.add(permission)

0 commit comments

Comments
 (0)