1
0
mirror of https://github.com/etesync/server synced 2025-06-30 20:32:33 +00:00
etesync-server/django_etebase/admin-cli/management/commands/group-modify.py
Martin Michalec e1446646e9 Add admin-cli
2021-06-02 23:29:18 +02:00

49 lines
2.1 KiB
Python
Executable File

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