From ed699816d818c4e2ad493e84ce5385cddf2f5312 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ben=20St=C3=A4hli?= Date: Wed, 16 Jun 2021 13:00:52 +0200 Subject: [PATCH 1/6] convenience --- .../commands/djangocms_misc_add_cms_group.py | 114 ++++++++++++++++++ .../commands/djangocms_misc_add_groups.py | 38 ++++++ djangocms_misc/tests/settings.py | 2 + 3 files changed, 154 insertions(+) create mode 100644 djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py create mode 100644 djangocms_misc/basic/management/commands/djangocms_misc_add_groups.py diff --git a/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py b/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py new file mode 100644 index 0000000..8a1763c --- /dev/null +++ b/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py @@ -0,0 +1,114 @@ +import logging +import os +import shutil + +from django.contrib.auth.models import Group, Permission +from django.core.management.base import BaseCommand +from django.db.models import Q + + +class Command(BaseCommand): + """ + """ + help = ( + "Add an auth.Group that gives basic CMS Permissions. User --plugin or --cms to add additional perms." + "") + + def add_arguments(self, parser): + parser.add_argument( + '--cms-base', + required=False, + action='store_const', + const=True, + default=False, + help="Basic CMS permissions (edit and publish pages, etc).") + parser.add_argument( + '--cms-publish', + required=False, + action='store_const', + const=True, + default=False, + help="adds exactly 'can publish page' permission)." + "") + parser.add_argument( + '--cms-superuser', + required=False, + action='store_const', + const=True, + default=False, + help="Superuser CMS permissions (add own users, page permissions, etc, etc)." + "") + parser.add_argument( + '--plugin', + required=False, + action='store_const', + const=True, + default=False, + help=""" +Searches for permissions with 'plugin' in their content type's app_label (ex.: cmsplugin_googlemaps), adds to group.""") + parser.add_argument( + '--cms', + action='store_const', + const=True, + default=False, + required=False, + help=""" +Searches for permissions with 'cms' in their content type's app_label (ex.:djangocms_text_ckeditor), adds to group.""") + parser.add_argument( + '--name', + required=False, + default='cms_base', + help=""" +Name of group. Defaults to cms_base.""") + parser.add_argument( + '--force', + action='store_const', + const=True, + required=False, + help=""" +Force overwrite of existing group and it's permissions.""") + + def handle(self, *args, **options): + group_name = options.get('name') + # copy + groups = Group.objects.filter(name=group_name) + if groups.count(): + if not options.get('force', None): + exit("use --force to overwrite existing groups!") + if groups.count() > 1: + exit("more than one group with name that name ({}) found! exiting.".format(group_name)) + group = groups.first() + else: + group = Group.objects.create(name=group_name) + + group.permissions.clear() + if options.get('cms_base'): + q_filter = Q(content_type__app_label='cms') + q_exclude = Q(name__contains='user') + q_exclude |= Q(name__contains='permission') + q_exclude |= Q(name__contains='publish') + self.add_permission(group, q_filter, q_exclude) + if options.get('cms_publish'): + q_filter = Q(content_type__app_label='cms') + q_filter &= Q(name__contains='publish') + self.add_permission(group, q_filter) + if options.get('cms_superuser'): + q_filter = Q(content_type__app_label='cms') + self.add_permission(group, q_filter) + if options.get('cms'): + q_filter = Q(content_type__app_label__contains='cms') + q_exclude = Q(content_type__app_label='cms') + self.add_permission(group, q_filter, q_exclude) + if options.get('plugin'): + q_filter = Q(content_type__app_label__contains='plugin') + q_exclude = Q(content_type__app_label='cms') + self.add_permission(group, q_filter, q_exclude) + + print(logging.INFO, 'Group created! ({})'.format(group_name)) + print(logging.INFO, 'Following permissions were granted:') + for perm in group.permissions.all(): + print(logging.INFO, '{}'.format(perm)) + + def add_permission(self, group, q_filter=Q(), q_exclude=Q()): + perms = Permission.objects.filter(q_filter).exclude(q_exclude) + group.permissions.add(*perms) diff --git a/djangocms_misc/basic/management/commands/djangocms_misc_add_groups.py b/djangocms_misc/basic/management/commands/djangocms_misc_add_groups.py new file mode 100644 index 0000000..e78caed --- /dev/null +++ b/djangocms_misc/basic/management/commands/djangocms_misc_add_groups.py @@ -0,0 +1,38 @@ +import logging +import os +import shutil + +from django.contrib.auth.models import Group, Permission +from django.core.management import call_command +from django.core.management.base import BaseCommand +from django.db.models import Q + + +class Command(BaseCommand): + """ + """ + help = ( + "Add an basic set of auth.Groups for cms usage (cms-base, cms-publisher, cms-superuser, plugin-permissions) that gives basic CMS Permissions. User --plugin or --cms to add additional perms." + "") + + def add_arguments(self, parser): + parser.add_argument( + '--force', + action='store_const', + const=True, + required=False, + help=""" + Force overwrite of existing group and it's permissions.""") + + def handle(self, *args, **options): + args = [] + if options.get('force'): + args = ['--force', ] + call_command('djangocms_misc_add_cms_group', '--cms-base', *args) + call_command('djangocms_misc_add_cms_group', '--cms-publish', '--name=cms_publisher', *args) + call_command('djangocms_misc_add_cms_group', '--cms-superuser', '--name=cms_superuser', *args) + call_command('djangocms_misc_add_cms_group', '--cms', '--plugin', '--name=cms_plugin_permissions', *args) + + def add_permission(self, group, q_filter=Q(), q_exclude=Q()): + perms = Permission.objects.filter(q_filter).exclude(q_exclude) + group.permissions.add(*perms) diff --git a/djangocms_misc/tests/settings.py b/djangocms_misc/tests/settings.py index b679391..4439cdd 100644 --- a/djangocms_misc/tests/settings.py +++ b/djangocms_misc/tests/settings.py @@ -117,6 +117,8 @@ ('base.html', 'Default'), ) +CMS_PERMISSION = True + COVERAGE_REPORT_HTML_OUTPUT_DIR = os.path.join( os.path.join(APP_ROOT, 'tests/coverage')) COVERAGE_MODULE_EXCLUDES = [ From eb3fb3e827fa61b4c173281e2a8f6f71d485226f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ben=20St=C3=A4hli?= Date: Tue, 22 Jun 2021 17:05:09 +0200 Subject: [PATCH 2/6] zack --- .../commands/djangocms_misc_add_cms_group.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py b/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py index 8a1763c..c634d98 100644 --- a/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py +++ b/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py @@ -84,23 +84,23 @@ def handle(self, *args, **options): group.permissions.clear() if options.get('cms_base'): q_filter = Q(content_type__app_label='cms') - q_exclude = Q(name__contains='user') - q_exclude |= Q(name__contains='permission') - q_exclude |= Q(name__contains='publish') + q_exclude = Q(name__icontains='user') + q_exclude |= Q(name__icontains='permission') + q_exclude |= Q(name__icontains='publish') self.add_permission(group, q_filter, q_exclude) if options.get('cms_publish'): q_filter = Q(content_type__app_label='cms') - q_filter &= Q(name__contains='publish') + q_filter &= Q(name__icontains='publish') self.add_permission(group, q_filter) if options.get('cms_superuser'): q_filter = Q(content_type__app_label='cms') self.add_permission(group, q_filter) if options.get('cms'): - q_filter = Q(content_type__app_label__contains='cms') + q_filter = Q(content_type__app_label__icontains='cms') q_exclude = Q(content_type__app_label='cms') self.add_permission(group, q_filter, q_exclude) if options.get('plugin'): - q_filter = Q(content_type__app_label__contains='plugin') + q_filter = Q(content_type__app_label__icontains='plugin') q_exclude = Q(content_type__app_label='cms') self.add_permission(group, q_filter, q_exclude) From 29f886f9b6996a615ef9340d0ad660e37c75c1d5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ben=20St=C3=A4hli?= Date: Tue, 22 Jun 2021 17:09:43 +0200 Subject: [PATCH 3/6] zack --- .../basic/management/commands/djangocms_misc_add_cms_group.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py b/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py index c634d98..1665647 100644 --- a/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py +++ b/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py @@ -107,7 +107,7 @@ def handle(self, *args, **options): print(logging.INFO, 'Group created! ({})'.format(group_name)) print(logging.INFO, 'Following permissions were granted:') for perm in group.permissions.all(): - print(logging.INFO, '{}'.format(perm)) + print(logging.INFO, '{}'.format(perm.name)) def add_permission(self, group, q_filter=Q(), q_exclude=Q()): perms = Permission.objects.filter(q_filter).exclude(q_exclude) From 7b675ea80ac7e1a92f329f7ee8d05a0ce0b5b6ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ben=20St=C3=A4hli?= Date: Tue, 22 Jun 2021 17:13:07 +0200 Subject: [PATCH 4/6] not needed things removed --- .../basic/management/commands/djangocms_misc_add_cms_group.py | 2 +- .../basic/management/commands/djangocms_misc_add_groups.py | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py b/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py index 1665647..c634d98 100644 --- a/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py +++ b/djangocms_misc/basic/management/commands/djangocms_misc_add_cms_group.py @@ -107,7 +107,7 @@ def handle(self, *args, **options): print(logging.INFO, 'Group created! ({})'.format(group_name)) print(logging.INFO, 'Following permissions were granted:') for perm in group.permissions.all(): - print(logging.INFO, '{}'.format(perm.name)) + print(logging.INFO, '{}'.format(perm)) def add_permission(self, group, q_filter=Q(), q_exclude=Q()): perms = Permission.objects.filter(q_filter).exclude(q_exclude) diff --git a/djangocms_misc/basic/management/commands/djangocms_misc_add_groups.py b/djangocms_misc/basic/management/commands/djangocms_misc_add_groups.py index e78caed..f792df7 100644 --- a/djangocms_misc/basic/management/commands/djangocms_misc_add_groups.py +++ b/djangocms_misc/basic/management/commands/djangocms_misc_add_groups.py @@ -32,7 +32,3 @@ def handle(self, *args, **options): call_command('djangocms_misc_add_cms_group', '--cms-publish', '--name=cms_publisher', *args) call_command('djangocms_misc_add_cms_group', '--cms-superuser', '--name=cms_superuser', *args) call_command('djangocms_misc_add_cms_group', '--cms', '--plugin', '--name=cms_plugin_permissions', *args) - - def add_permission(self, group, q_filter=Q(), q_exclude=Q()): - perms = Permission.objects.filter(q_filter).exclude(q_exclude) - group.permissions.add(*perms) From 9338a775ad67a3d633e960059cf956f2b4408061 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ben=20St=C3=A4hli?= Date: Sun, 27 Jun 2021 00:55:49 +0200 Subject: [PATCH 5/6] release.txt --- CHANGELOG.txt | 5 +++++ release.txt | 2 ++ 2 files changed, 7 insertions(+) diff --git a/CHANGELOG.txt b/CHANGELOG.txt index 0a375c2..362b2f7 100644 --- a/CHANGELOG.txt +++ b/CHANGELOG.txt @@ -3,6 +3,11 @@ - more tests: autopublisher, for example! +==== 0.1.20 (2021-06-27) === + +- management commands for easy cms/plugin auth group creation + + ==== 0.1.19 (2021-06-05) === - switched to github actions diff --git a/release.txt b/release.txt index 5c3d56c..2628abe 100644 --- a/release.txt +++ b/release.txt @@ -6,6 +6,8 @@ CHANGELOG.txt git flow release finish 0.xxx git push --all; git push --tags git push upstream --all; git push upstream --tags + +# no more, is in github action python setup.py sdist && python setup.py bdist_wheel --universal twine upload dist/* -r pypitest twine upload dist/* From daa49d875e4f42902f448d8abb1da1263e78dc5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ben=20St=C3=A4hli?= Date: Sun, 27 Jun 2021 00:56:22 +0200 Subject: [PATCH 6/6] 0.1.20 --- djangocms_misc/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/djangocms_misc/__init__.py b/djangocms_misc/__init__.py index 59a0d8c..5fd75cf 100644 --- a/djangocms_misc/__init__.py +++ b/djangocms_misc/__init__.py @@ -1,2 +1,2 @@ -__version__ = '0.1.19' +__version__ = '0.1.20' __author__ = 'benzkji'