set_superuser.py 1.69 KB
Newer Older
1
"""Management command to grant or revoke superuser access for one or more users"""
2
from __future__ import print_function
3 4

from django.contrib.auth.models import User
5
from django.core.management.base import BaseCommand
6 7 8 9


class Command(BaseCommand):
    """Management command to grant or revoke superuser access for one or more users"""
10

11 12 13 14 15 16
    help = """
    This command will set is_superuser to true for one or more users.
    Lookup by username or email address, assumes usernames
    do not look like email addresses.
    """

17 18 19 20 21 22 23 24 25
    def add_arguments(self, parser):
        parser.add_argument('users',
                            nargs='+',
                            help='Users to set or unset (with the --unset flag) as superusers')
        parser.add_argument('--unset',
                            action='store_true',
                            dest='unset',
                            default=False,
                            help='Set is_superuser to False instead of True')
26

27 28
    def handle(self, *args, **options):
        for user in options['users']:
29 30 31 32 33 34 35 36 37 38 39 40
            try:
                if '@' in user:
                    userobj = User.objects.get(email=user)
                else:
                    userobj = User.objects.get(username=user)

                if options['unset']:
                    userobj.is_superuser = False
                else:
                    userobj.is_superuser = True

                userobj.save()
41
                print('Modified {} sucessfully.'.format(user))
42 43

            except Exception as err:  # pylint: disable=broad-except
44
                print("Error modifying user with identifier {}: {}: {}".format(user, type(err).__name__, err.message))
45

46
        print('Complete!')