Skip to content

Commit 5d4ecb7

Browse files
committed
user, group, & permissions fix
1 parent f2731d3 commit 5d4ecb7

File tree

7 files changed

+100
-90
lines changed

7 files changed

+100
-90
lines changed

initializers/groups.yml

Lines changed: 6 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,9 @@
1-
## To list all permissions, run:
2-
##
3-
## docker-compose run --rm --entrypoint /bin/bash netbox
4-
## $ ./manage.py migrate
5-
## $ ./manage.py shell
6-
## > from django.contrib.auth.models import Permission
7-
## > print('\n'.join([p.codename for p in Permission.objects.all()]))
8-
##
9-
## Permission lists support wildcards. See the examples below.
10-
##
11-
## Examples:
12-
13-
# applications:
1+
# - name: applications
142
# users:
15-
# - technical_user
16-
# readers:
3+
# - technical_user
4+
# - name: readers
175
# users:
18-
# - reader
19-
# writers:
6+
# - reader
7+
# - name: writers
208
# users:
21-
# - writer
22-
# permissions:
23-
# - delete_device
24-
# - delete_virtualmachine
25-
# - add_*
26-
# - change_*
27-
# vm_managers:
28-
# permissions:
29-
# - '*_virtualmachine'
30-
# device_managers:
31-
# permissions:
32-
# - '*device*'
33-
# creators:
34-
# permissions:
35-
# - add_*
9+
# - writer

initializers/object_permissions.yml

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#- name: all.ro
2+
# description: 'Read Only for All Objects'
3+
# enabled: true
4+
# # object_types: all
5+
# groups:
6+
# - applications
7+
# - readers
8+
# actions:
9+
# - view
10+
#- name: all.rw
11+
# description: 'Read/Write for All Objects'
12+
# enabled: true
13+
# # object_types: all
14+
# groups:
15+
# - writers
16+
# users:
17+
# - jdoe
18+
# actions:
19+
# - add
20+
# - change
21+
# - delete
22+
# - view

initializers/users.yml

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,14 @@
1-
## To list all permissions, run:
2-
##
3-
## docker-compose run --rm --entrypoint /bin/bash netbox
4-
## $ ./manage.py migrate
5-
## $ ./manage.py shell
6-
## > from django.contrib.auth.models import Permission
7-
## > print('\n'.join([p.codename for p in Permission.objects.all()]))
8-
##
9-
## Permission lists support wildcards. See the examples below.
10-
##
11-
## Examples:
12-
13-
# technical_user:
14-
# api_token: 0123456789technicaluser789abcdef01234567 # must be looooong!
15-
# reader:
16-
# password: reader
17-
# writer:
18-
# password: writer
19-
# permissions:
20-
# - delete_device
21-
# - delete_virtualmachine
22-
# - add_*
23-
# - change_*
1+
#- username: technical_user
2+
# api_token: 0123456789technicaluser789abcdef01234567 # must be looooong!
3+
#- username: reader
4+
# password: reader
5+
#- username: writer
6+
# password: writer
7+
#- username: jdoe
8+
# first_name: John
9+
# last_name: Doe
10+
# api_token: 0123456789jdoe789abcdef01234567jdoe
11+
# is_active: True
12+
# is_superuser: False
13+
# is_staff: False
14+
# email: john.doe@example.com

startup_scripts/000_users.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import sys
22

33
from django.contrib.auth.models import User
4-
from startup_script_utils import load_yaml, set_permissions
4+
from startup_script_utils import load_yaml
55
from users.models import Token
66

77
users = load_yaml("/opt/netbox/initializers/users.yml")
@@ -19,6 +19,3 @@
1919

2020
if user_details.get("api_token", 0):
2121
Token.objects.create(user=user, key=user_details["api_token"])
22-
23-
yaml_permissions = user_details.get("permissions", [])
24-
set_permissions(user.user_permissions, yaml_permissions)

startup_scripts/010_groups.py

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,27 @@
11
import sys
22

3-
from django.contrib.auth.models import Group, User
4-
from startup_script_utils import load_yaml, set_permissions
3+
from users.models import AdminGroup, AdminUser
4+
from startup_script_utils import load_yaml
55

66
groups = load_yaml("/opt/netbox/initializers/groups.yml")
77
if groups is None:
88
sys.exit()
99

10-
for groupname, group_details in groups.items():
11-
group, created = Group.objects.get_or_create(name=groupname)
10+
for params in groups:
11+
groupname=params['name']
12+
13+
group, created = AdminGroup.objects.get_or_create(
14+
name=groupname
15+
)
1216

1317
if created:
1418
print("👥 Created group", groupname)
1519

16-
for username in group_details.get("users", []):
17-
user = User.objects.get(username=username)
20+
for username in params.get("users", []):
21+
user = AdminUser.objects.get(username=username)
1822

1923
if user:
20-
user.groups.add(group)
24+
group.user_set.add(user)
25+
print(" 👤 Assigned user %s to group %s" % (username, AdminGroup.name))
2126

22-
yaml_permissions = group_details.get("permissions", [])
23-
set_permissions(group.permissions, yaml_permissions)
27+
group.save()
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import sys
2+
3+
from users.models import ObjectPermission, AdminGroup, AdminUser
4+
from startup_script_utils import load_yaml
5+
from django.contrib.contenttypes.models import ContentType
6+
7+
object_permissions = load_yaml("/opt/netbox/initializers/object_permissions.yml")
8+
9+
if object_permissions is None:
10+
sys.exit()
11+
12+
13+
for params in object_permissions:
14+
15+
object_permission, created = ObjectPermission.objects.get_or_create(
16+
name=params['name'],
17+
description=params['description'],
18+
enabled=params['enabled'],
19+
actions=params['actions']
20+
)
21+
22+
# Need to try to pass a list of model_name and app_label for more than just the current all objects.
23+
#object_types = ContentType.objects.filter(app_label__in=params.pop("object_types"))
24+
#object_permission.object_types.set(ContentType.objects.filter(app_label__in=params.pop("object_types")))
25+
object_permission.object_types.set(ContentType.objects.all())
26+
object_permission.save()
27+
28+
print("🔓 Created object permission", object_permission.name)
29+
30+
for groupname in params.get("groups", []):
31+
group = AdminGroup.objects.get(name=groupname)
32+
33+
if group:
34+
object_permission.groups.add(group)
35+
print(" 👥 Assigned group %s object permission of %s" % (groupname, object_permission.name))
36+
37+
for username in params.get("users", []):
38+
user = AdminUser.objects.get(username=username)
39+
40+
if user:
41+
object_permission.users.add(user)
42+
print(" 👤 Assigned user %s object permission of %s" % (username, object_permission.name))
43+
44+
object_permission.save()

startup_scripts/startup_script_utils/permissions.py

Lines changed: 0 additions & 22 deletions
This file was deleted.

0 commit comments

Comments
 (0)