mirror of https://github.com/etesync/server
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.
49 lines
2.1 KiB
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)))
|