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') )