You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
etesync-server/django_etebase/admin-cli/management/commands/group-modify.py

49 lines
2.1 KiB

from django.core.management.base import BaseCommand
from django.contrib.auth.models import Group, Permission
from django.db.utils import IntegrityError
class Command(BaseCommand):
def add_arguments(self, parser):
parser.add_argument( 'name'
, type=str
, help="Group's name." )
parser.add_argument( '-n'
, '--new_name'
, '--new-name'
, type=str
, default=None
, help="Group's new name." )
parser.add_argument( '-m'
, '--mode'
, type=str
, choices=['set', 'add', 'remove']
, default='set'
, help="Set modification mode. Affects --permissions." )
parser.add_argument( '--permissions'
, type=str
, nargs='*'
, default=None
, help="Group's new permissions." )
def handle(self, *args, **options):
try:
if options["permissions"] != None:
for index,permission in enumerate(options["permissions"]):
options["permissions"][index] = Permission.objects.get(name=permission)
group = Group.objects.get(name=options["name"])
if options["new_name"] != None:
group.name = options["new_name"]
if options["permissions"] != None:
if options["mode"] == "set" : group.permissions.set ( options["permissions"])
if options["mode"] == "add" : group.permissions.add (*options["permissions"])
if options["mode"] == "remove" : group.permissions.remove(*options["permissions"])
group.save()
self.stdout.write(self.style.SUCCESS(f'Group "{options["name"]}" has been modified.'))
except (User.DoesNotExist, ValueError) as exception:
self.stdout.write(self.style.ERROR(f'Unable to modify group "{options["name"]}": ' + str(exception)))