Django_Basic_Manufacturing/users/management/commands/create_default_groups.py

129 lines
4.5 KiB
Python

from django.core.management.base import BaseCommand
from django.contrib.auth import get_user_model
from users.models import UserGroup
User = get_user_model()
class Command(BaseCommand):
help = 'Create default user groups with appropriate permissions'
def handle(self, *args, **options):
# Create Administrator group
admin_group, created = UserGroup.objects.get_or_create(
name='Administrators',
defaults={
'description': 'Administrator group with full access to all modules'
}
)
if created:
admin_group.permissions = {
'manufacturing': True,
'inventory': True,
'purchase': True,
'sales': True,
'user_management': True,
'reporting': True,
'dashboard': True
}
admin_group.save()
self.stdout.write(
self.style.SUCCESS('Successfully created Administrators group')
)
# Create Manager group
manager_group, created = UserGroup.objects.get_or_create(
name='Managers',
defaults={
'description': 'Manager group with access to core business modules'
}
)
if created:
manager_group.permissions = {
'manufacturing': True,
'inventory': True,
'purchase': True,
'sales': True,
'user_management': False,
'reporting': True,
'dashboard': True
}
manager_group.save()
self.stdout.write(
self.style.SUCCESS('Successfully created Managers group')
)
# Create Operator group
operator_group, created = UserGroup.objects.get_or_create(
name='Operators',
defaults={
'description': 'Operator group with access to operational modules'
}
)
if created:
operator_group.permissions = {
'manufacturing': True,
'inventory': True,
'purchase': False,
'sales': True,
'user_management': False,
'reporting': False,
'dashboard': True
}
operator_group.save()
self.stdout.write(
self.style.SUCCESS('Successfully created Operators group')
)
# Create Viewer group
viewer_group, created = UserGroup.objects.get_or_create(
name='Viewers',
defaults={
'description': 'Viewer group with read-only access to reports and dashboard'
}
)
if created:
viewer_group.permissions = {
'manufacturing': False,
'inventory': False,
'purchase': False,
'sales': False,
'user_management': False,
'reporting': True,
'dashboard': True
}
viewer_group.save()
self.stdout.write(
self.style.SUCCESS('Successfully created Viewers group')
)
# Assign existing users to appropriate groups
self.assign_users_to_groups()
self.stdout.write(
self.style.SUCCESS('Successfully created default groups and assigned users')
)
def assign_users_to_groups(self):
"""Assign existing users to appropriate groups"""
# Get the groups
try:
admin_group = UserGroup.objects.get(name='Administrators')
manager_group = UserGroup.objects.get(name='Managers')
operator_group = UserGroup.objects.get(name='Operators')
viewer_group = UserGroup.objects.get(name='Viewers')
except UserGroup.DoesNotExist:
self.stdout.write(
self.style.ERROR('One or more groups do not exist')
)
return
# Assign users to groups (this is a simple assignment, you may want to customize this)
for user in User.objects.all():
# If user doesn't have a group, assign them to the operator group by default
if not user.group:
user.group = operator_group
user.save()
self.stdout.write(
self.style.SUCCESS('Successfully assigned users to groups')
)