from django.core.management.base import BaseCommand from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType from accounts.models import User from accounts.signals import create_default_groups class Command(BaseCommand): help = 'Set up default groups and permissions for user roles' def handle(self, *args, **options): self.stdout.write('Creating default groups and permissions...') try: # Create default groups with permissions create_default_groups() # Sync existing users with groups based on their roles users = User.objects.exclude(role=User.Roles.USER) for user in users: group = Group.objects.filter(name=user.role).first() if group: user.groups.add(group) # Update staff/superuser status based on role if user.role == User.Roles.SUPERUSER: user.is_superuser = True user.is_staff = True elif user.role in [User.Roles.ADMIN, User.Roles.MODERATOR]: user.is_staff = True user.save() self.stdout.write(self.style.SUCCESS('Successfully set up groups and permissions')) # Print summary for group in Group.objects.all(): self.stdout.write(f'\nGroup: {group.name}') self.stdout.write('Permissions:') for perm in group.permissions.all(): self.stdout.write(f' - {perm.codename}') except Exception as e: self.stdout.write(self.style.ERROR(f'Error setting up groups: {str(e)}'))