from django.core.management.base import BaseCommand from django.contrib.auth.models import Group 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)}" ) )