mirror of
https://github.com/paperless-ngx/paperless-ngx.git
synced 2025-12-06 14:55:07 +01:00
Merge a607ac8cc0 into 6f3451bce0
This commit is contained in:
commit
1bbf55811d
4 changed files with 134 additions and 0 deletions
71
src/documents/management/commands/group_create.py
Normal file
71
src/documents/management/commands/group_create.py
Normal file
|
|
@ -0,0 +1,71 @@
|
||||||
|
from django.contrib import auth
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.contrib.auth.models import Group
|
||||||
|
from django.contrib.auth.models import Permission
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
from django.db import transaction
|
||||||
|
|
||||||
|
from documents.management.commands.mixins import ProgressBarMixin
|
||||||
|
|
||||||
|
|
||||||
|
class Command(ProgressBarMixin, BaseCommand):
|
||||||
|
help = "Create a group"
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
"name",
|
||||||
|
help="Name of the group",
|
||||||
|
)
|
||||||
|
|
||||||
|
# Named (optional) arguments
|
||||||
|
parser.add_argument(
|
||||||
|
"-p",
|
||||||
|
"--permission",
|
||||||
|
action="append",
|
||||||
|
help="Permissions to add to the created group",
|
||||||
|
)
|
||||||
|
# Named (optional) arguments
|
||||||
|
parser.add_argument(
|
||||||
|
"-a",
|
||||||
|
"--all-permissions",
|
||||||
|
action="store_true",
|
||||||
|
help="Give this group all available permissions",
|
||||||
|
)
|
||||||
|
self.add_argument_progress_bar_mixin(parser)
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
self.handle_progress_bar_mixin(**options)
|
||||||
|
with transaction.atomic():
|
||||||
|
name = options["name"]
|
||||||
|
permissions = options["permission"]
|
||||||
|
setAllPermissions = options["all_permissions"]
|
||||||
|
|
||||||
|
if setAllPermissions:
|
||||||
|
permissions = set()
|
||||||
|
# We create (but not persist) a temporary superuser and use it to game the
|
||||||
|
# system and pull all permissions easily.
|
||||||
|
tmp_superuser = get_user_model()(
|
||||||
|
is_active=True,
|
||||||
|
is_superuser=True,
|
||||||
|
)
|
||||||
|
for backend in auth.get_backends():
|
||||||
|
if hasattr(backend, "get_all_permissions"):
|
||||||
|
permissions.update(backend.get_all_permissions(tmp_superuser))
|
||||||
|
|
||||||
|
# Output unique list of permissions sorted by permission name.
|
||||||
|
permissions = sorted(list(permissions))
|
||||||
|
|
||||||
|
new_group, created = Group.objects.get_or_create(name=name)
|
||||||
|
if created:
|
||||||
|
self.stdout.write(f"Created group: {new_group.name}\n")
|
||||||
|
else:
|
||||||
|
self.stdout.write(f"Group already exists: {new_group.name}\n")
|
||||||
|
|
||||||
|
for permission in permissions:
|
||||||
|
[module, codename] = permission.split(".")
|
||||||
|
permission = Permission.objects.get(
|
||||||
|
content_type__app_label=module,
|
||||||
|
codename=codename,
|
||||||
|
)
|
||||||
|
new_group.permissions.add(permission)
|
||||||
|
self.stdout.write(f"Added permission: {permission}\n")
|
||||||
24
src/documents/management/commands/group_delete.py
Normal file
24
src/documents/management/commands/group_delete.py
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
from django.contrib.auth.models import Group
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
from django.db import transaction
|
||||||
|
|
||||||
|
from documents.management.commands.mixins import ProgressBarMixin
|
||||||
|
|
||||||
|
|
||||||
|
class Command(ProgressBarMixin, BaseCommand):
|
||||||
|
help = "Delete a group"
|
||||||
|
|
||||||
|
def add_arguments(self, parser):
|
||||||
|
parser.add_argument(
|
||||||
|
"name",
|
||||||
|
help="Name of the group",
|
||||||
|
)
|
||||||
|
|
||||||
|
self.add_argument_progress_bar_mixin(parser)
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
self.handle_progress_bar_mixin(**options)
|
||||||
|
|
||||||
|
with transaction.atomic():
|
||||||
|
name = options["name"]
|
||||||
|
Group.objects.filter(name=name).delete()
|
||||||
13
src/documents/management/commands/group_list.py
Normal file
13
src/documents/management/commands/group_list.py
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
from django.contrib.auth.models import Group
|
||||||
|
from django.core.management import BaseCommand
|
||||||
|
|
||||||
|
from documents.management.commands.mixins import ProgressBarMixin
|
||||||
|
|
||||||
|
|
||||||
|
class Command(ProgressBarMixin, BaseCommand):
|
||||||
|
help = "List all groups"
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
groups = Group.objects.all()
|
||||||
|
for group in groups:
|
||||||
|
self.stdout.write(f"{group.name}\n")
|
||||||
26
src/documents/management/commands/permission_list.py
Normal file
26
src/documents/management/commands/permission_list.py
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Code taken from https://github.com/timonweb/django-debug-permissions
|
||||||
|
# Licensed under BSD-3-Clause license
|
||||||
|
|
||||||
|
from django.contrib import auth
|
||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = "Get a list of all permissions available in the system"
|
||||||
|
|
||||||
|
def handle(self, *args, **options):
|
||||||
|
permissions = set()
|
||||||
|
# We create (but not persist) a temporary superuser and use it to game the
|
||||||
|
# system and pull all permissions easily.
|
||||||
|
tmp_superuser = get_user_model()(
|
||||||
|
is_active=True,
|
||||||
|
is_superuser=True,
|
||||||
|
)
|
||||||
|
for backend in auth.get_backends():
|
||||||
|
if hasattr(backend, "get_all_permissions"):
|
||||||
|
permissions.update(backend.get_all_permissions(tmp_superuser))
|
||||||
|
|
||||||
|
# Output unique list of permissions sorted by permission name.
|
||||||
|
sorted_list_of_permissions = sorted(list(permissions))
|
||||||
|
self.stdout.write("\n".join(sorted_list_of_permissions))
|
||||||
Loading…
Add table
Add a link
Reference in a new issue