Skip to content

Commit 8806288

Browse files
authored
Merge pull request #244 from ScanPlusGmbH/init-perms-function
Permission handling in external function
2 parents 882f7bc + 8d3bd48 commit 8806288

File tree

4 files changed

+28
-35
lines changed

4 files changed

+28
-35
lines changed

startup_scripts/000_users.py

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
1-
from django.contrib.auth.models import Permission, Group, User
2-
from users.models import Token
3-
4-
from startup_script_utils import load_yaml
51
import sys
62

7-
users = load_yaml('/opt/netbox/initializers/users.yml')
3+
from django.contrib.auth.models import Group, User
4+
from startup_script_utils import load_yaml, set_permissions
5+
from users.models import Token
86

7+
users = load_yaml('/opt/netbox/initializers/users.yml')
98
if users is None:
109
sys.exit()
1110

@@ -21,17 +20,4 @@
2120
Token.objects.create(user=user, key=user_details['api_token'])
2221

2322
yaml_permissions = user_details.get('permissions', [])
24-
if yaml_permissions:
25-
subject = user.user_permissions
26-
subject.clear()
27-
for yaml_permission in yaml_permissions:
28-
if '*' in yaml_permission:
29-
permission_filter = '^' + yaml_permission.replace('*','.*') + '$'
30-
permissions = Permission.objects.filter(codename__iregex=permission_filter)
31-
print(" ⚿ Granting", permissions.count(), "permissions matching '" + yaml_permission + "'")
32-
else:
33-
permissions = Permission.objects.filter(codename=yaml_permission)
34-
print(" ⚿ Granting permission", yaml_permission)
35-
36-
for permission in permissions:
37-
subject.add(permission)
23+
set_permissions(user.user_permissions, yaml_permissions)

startup_scripts/010_groups.py

Lines changed: 4 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
1-
from django.contrib.auth.models import Permission, Group, User
2-
from startup_script_utils import load_yaml
31
import sys
42

3+
from django.contrib.auth.models import Group, User
4+
from startup_script_utils import load_yaml, set_permissions
5+
56
groups = load_yaml('/opt/netbox/initializers/groups.yml')
67
if groups is None:
78
sys.exit()
@@ -19,17 +20,4 @@
1920
user.groups.add(group)
2021

2122
yaml_permissions = group_details.get('permissions', [])
22-
if yaml_permissions:
23-
subject = group.permissions
24-
subject.clear()
25-
for yaml_permission in yaml_permissions:
26-
if '*' in yaml_permission:
27-
permission_filter = '^' + yaml_permission.replace('*','.*') + '$'
28-
permissions = Permission.objects.filter(codename__iregex=permission_filter)
29-
print(" ⚿ Granting", permissions.count(), "permissions matching '" + yaml_permission + "'")
30-
else:
31-
permissions = Permission.objects.filter(codename=yaml_permission)
32-
print(" ⚿ Granting permission", yaml_permission)
33-
34-
for permission in permissions:
35-
subject.add(permission)
23+
set_permissions(group.permissions, yaml_permissions)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
from .load_yaml import load_yaml
2+
from .permissions import set_permissions
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
from django.contrib.auth.models import Permission
2+
3+
4+
def set_permissions(subject, permission_filters):
5+
if subject is None or permission_filters is None:
6+
return
7+
subject.clear()
8+
for permission_filter in permission_filters:
9+
if "*" in permission_filter:
10+
permission_filter_regex = "^" + permission_filter.replace("*", ".*") + "$"
11+
permissions = Permission.objects.filter(codename__iregex=permission_filter_regex)
12+
print(" ⚿ Granting", permissions.count(), "permissions matching '" + permission_filter + "'")
13+
else:
14+
permissions = Permission.objects.filter(codename=permission_filter)
15+
print(" ⚿ Granting permission", permission_filter)
16+
17+
for permission in permissions:
18+
subject.add(permission)

0 commit comments

Comments
 (0)