From d79c85c7af9e0e5628096bfc77bb2ea34ae21e58 Mon Sep 17 00:00:00 2001 From: Wesley B <62723358+wesleyboar@users.noreply.github.com> Date: Mon, 11 Nov 2024 18:13:48 -0600 Subject: [PATCH 01/13] refactor: simpler syntax for group perms (#894) * chore: remove unused imports * refactor: add & use add_perm utility function * docs: add & use add_perm utility function * docs: missing spaces * docs: missing spaces --- .../management/commands/group_perms/README.md | 14 +- .../group_perms/media_editor_advanced.py | 168 +++++------------- .../group_perms/media_editor_basic.py | 82 +++------ .../group_perms/news_writer_advanced.py | 95 +++++----- .../commands/group_perms/news_writer_basic.py | 59 +++--- .../group_perms/text_editor_advanced.py | 86 +++------ .../commands/group_perms/text_editor_basic.py | 60 ++----- .../management/commands/group_perms/util.py | 23 +++ .../management/commands/set_group_perms.py | 1 - 9 files changed, 218 insertions(+), 370 deletions(-) create mode 100644 taccsite_cms/management/commands/group_perms/util.py diff --git a/taccsite_cms/management/commands/group_perms/README.md b/taccsite_cms/management/commands/group_perms/README.md index 0d7e86d20..f8d7a0f2f 100644 --- a/taccsite_cms/management/commands/group_perms/README.md +++ b/taccsite_cms/management/commands/group_perms/README.md @@ -27,12 +27,10 @@ Use regex to convert the ` + ``` + +- Replace: + + ```text + + add_perm(group, '$1', '$2', '$3') + ``` + ## Reference -- ["Next Steps" for this feature](https://github.com/TACC/Core-CMS/pull/598#issuecomment-1423258767) - [Programmatically create a django group with permissions](https://stackoverflow.com/q/22250352/11817077) -- [Writing custom django-admin commands](https://docs.djangoproject.com/en/2.2/howto/custom-management-commands/) +- [Writing custom django-admin commands](https://docs.djangoproject.com/en/4.2/howto/custom-management-commands/) From 648f1ef978e3aa9ade087171961b670b4530082c Mon Sep 17 00:00:00 2001 From: Wesley B <62723358+wesleyboar@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:44:33 -0600 Subject: [PATCH 05/13] docs: CMD-189 move group perm descs to files --- .../management/commands/group_perms/README.md | 20 +++---------------- .../group_perms/grid_editor_advanced.py | 5 +++++ .../commands/group_perms/grid_editor_basic.py | 4 ++++ .../group_perms/media_editor_advanced.py | 5 +++++ .../group_perms/media_editor_basic.py | 4 ++++ .../group_perms/news_writer_advanced.py | 6 ++++++ .../commands/group_perms/news_writer_basic.py | 4 ++++ .../group_perms/text_editor_advanced.py | 5 +++++ .../commands/group_perms/text_editor_basic.py | 4 ++++ 9 files changed, 40 insertions(+), 17 deletions(-) diff --git a/taccsite_cms/management/commands/group_perms/README.md b/taccsite_cms/management/commands/group_perms/README.md index f6b84d65c..ecf6ba38f 100644 --- a/taccsite_cms/management/commands/group_perms/README.md +++ b/taccsite_cms/management/commands/group_perms/README.md @@ -2,21 +2,7 @@ ## Groups & Permissions -**News Writer (Basic)**: To edit/add Blog articles. - -**News Writer (Advanced)**: As much as "News Writer (Basic)" **plus** edit/add/delete Blockquotes **plus** add/delete news Categories and Tags. - -**Text Editor (Basic)**: To edit textual elements blocks, folders, and files. - -**Text Editor (Advanced)**: As much as "Text Editor (Basic)" **plus** add/delete textual elements, folders and files. - -**Media Editor (Basic)**: To edit images, videos, thumbnail sizes, and folders. - -**Media Editor (Advanced)**: As much as "Media Editor (Basic)" **plus** add/delete images, videos, thumbnail sizes, and folders. - -**Grid Editor (Basic)**: To edit layout (Containers, Rows, Columns). - -**Grid Editor (Advanced)**: As much as "Grid Editor (Basic)" **plus** add/delete layout (Containers, Rows, Columns). +See the description at the top of each file in this folder. ## Usage @@ -50,8 +36,8 @@ django.setup() ### Create a New Group 1. Duplicate an existing group. -2. Rename the file and group name. -3. Adjust permissions usign existing sets. +2. Rename the file and gorup name. Rewrite file description. +3. Adjust permissions using existing sets. ### Create a New Permission Set diff --git a/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py b/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py index 572a5823f..fae97da79 100644 --- a/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py @@ -1,3 +1,8 @@ +""" +To do as much as `grid_editor_basic` +To add/delete layout (Containers, Rows, Columns) +""" + from django.contrib.auth.models import Group from .util import ( diff --git a/taccsite_cms/management/commands/group_perms/grid_editor_basic.py b/taccsite_cms/management/commands/group_perms/grid_editor_basic.py index 938356637..f16f8b9e7 100644 --- a/taccsite_cms/management/commands/group_perms/grid_editor_basic.py +++ b/taccsite_cms/management/commands/group_perms/grid_editor_basic.py @@ -1,3 +1,7 @@ +""" +To edit layout (Containers, Rows, Columns) +""" + from django.contrib.auth.models import Group from .util import ( diff --git a/taccsite_cms/management/commands/group_perms/media_editor_advanced.py b/taccsite_cms/management/commands/group_perms/media_editor_advanced.py index 0d377e7f3..327c9a6dc 100644 --- a/taccsite_cms/management/commands/group_perms/media_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/media_editor_advanced.py @@ -1,3 +1,8 @@ +""" +To do as much as `media_editor_basic` +To add/delete images, videos, thumbnail sizes, and folders +""" + from django.contrib.auth.models import Group from .util import ( diff --git a/taccsite_cms/management/commands/group_perms/media_editor_basic.py b/taccsite_cms/management/commands/group_perms/media_editor_basic.py index a6bf7ad41..d60b76386 100644 --- a/taccsite_cms/management/commands/group_perms/media_editor_basic.py +++ b/taccsite_cms/management/commands/group_perms/media_editor_basic.py @@ -1,3 +1,7 @@ +""" +To edit images, videos, thumbnail sizes, and folders +""" + from django.contrib.auth.models import Group from .util import ( diff --git a/taccsite_cms/management/commands/group_perms/news_writer_advanced.py b/taccsite_cms/management/commands/group_perms/news_writer_advanced.py index 036e45742..bb56789b2 100644 --- a/taccsite_cms/management/commands/group_perms/news_writer_advanced.py +++ b/taccsite_cms/management/commands/group_perms/news_writer_advanced.py @@ -1,3 +1,9 @@ +""" +To do as much as `news_writer_basic` +To edit/add/delete Blockquotes +To add/delete news Categories and Tags +""" + from django.contrib.auth.models import Group from .util import ( diff --git a/taccsite_cms/management/commands/group_perms/news_writer_basic.py b/taccsite_cms/management/commands/group_perms/news_writer_basic.py index 39938e2f5..925422ee4 100644 --- a/taccsite_cms/management/commands/group_perms/news_writer_basic.py +++ b/taccsite_cms/management/commands/group_perms/news_writer_basic.py @@ -1,3 +1,7 @@ +""" +To edit/add Blog articles +""" + from django.contrib.auth.models import Group from .util import ( diff --git a/taccsite_cms/management/commands/group_perms/text_editor_advanced.py b/taccsite_cms/management/commands/group_perms/text_editor_advanced.py index 0e8ad5ae2..f7458e247 100644 --- a/taccsite_cms/management/commands/group_perms/text_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/text_editor_advanced.py @@ -1,3 +1,8 @@ +""" +To do as much as `text_editor_basic` +To add/delete textual elements, folders and files +""" + from django.contrib.auth.models import Group from .util import ( diff --git a/taccsite_cms/management/commands/group_perms/text_editor_basic.py b/taccsite_cms/management/commands/group_perms/text_editor_basic.py index 8a0f13508..12994f6a0 100644 --- a/taccsite_cms/management/commands/group_perms/text_editor_basic.py +++ b/taccsite_cms/management/commands/group_perms/text_editor_basic.py @@ -1,3 +1,7 @@ +""" +To edit textual elements blocks, folders, and files +""" + from django.contrib.auth.models import Group from .util import ( From 361a404f25366ba6d25fccd3dd0601fbf24ddd72 Mon Sep 17 00:00:00 2001 From: Wesley B <62723358+wesleyboar@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:48:05 -0600 Subject: [PATCH 06/13] refactor: CMD-189 move utils and README to root --- taccsite_cms/management/commands/{group_perms => }/README.md | 2 +- .../management/commands/group_perms/grid_editor_advanced.py | 2 +- .../management/commands/group_perms/grid_editor_basic.py | 2 +- .../management/commands/group_perms/media_editor_advanced.py | 2 +- .../management/commands/group_perms/media_editor_basic.py | 2 +- .../management/commands/group_perms/news_writer_advanced.py | 2 +- .../management/commands/group_perms/news_writer_basic.py | 2 +- .../management/commands/group_perms/text_editor_advanced.py | 2 +- .../management/commands/group_perms/text_editor_basic.py | 2 +- taccsite_cms/management/commands/{group_perms => }/util.py | 0 10 files changed, 9 insertions(+), 9 deletions(-) rename taccsite_cms/management/commands/{group_perms => }/README.md (97%) rename taccsite_cms/management/commands/{group_perms => }/util.py (100%) diff --git a/taccsite_cms/management/commands/group_perms/README.md b/taccsite_cms/management/commands/README.md similarity index 97% rename from taccsite_cms/management/commands/group_perms/README.md rename to taccsite_cms/management/commands/README.md index ecf6ba38f..24cfee8de 100644 --- a/taccsite_cms/management/commands/group_perms/README.md +++ b/taccsite_cms/management/commands/README.md @@ -2,7 +2,7 @@ ## Groups & Permissions -See the description at the top of each file in this folder. +See the description at the top of each file in [`group_perms/`](./group_perms). ## Usage diff --git a/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py b/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py index fae97da79..05dc452a9 100644 --- a/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py @@ -5,7 +5,7 @@ from django.contrib.auth.models import Group -from .util import ( +from ..util import ( let_view_and_change_page_structure, let_view_and_change_grid, let_add_and_delete_grid diff --git a/taccsite_cms/management/commands/group_perms/grid_editor_basic.py b/taccsite_cms/management/commands/group_perms/grid_editor_basic.py index f16f8b9e7..443efa1e8 100644 --- a/taccsite_cms/management/commands/group_perms/grid_editor_basic.py +++ b/taccsite_cms/management/commands/group_perms/grid_editor_basic.py @@ -4,7 +4,7 @@ from django.contrib.auth.models import Group -from .util import ( +from ..util import ( let_view_and_change_page_structure, let_view_and_change_grid ) diff --git a/taccsite_cms/management/commands/group_perms/media_editor_advanced.py b/taccsite_cms/management/commands/group_perms/media_editor_advanced.py index 327c9a6dc..4d63fac22 100644 --- a/taccsite_cms/management/commands/group_perms/media_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/media_editor_advanced.py @@ -5,7 +5,7 @@ from django.contrib.auth.models import Group -from .util import ( +from ..util import ( let_view_and_change_page_structure, let_view_and_change_media_plugins, let_add_and_delete_media_plugins, diff --git a/taccsite_cms/management/commands/group_perms/media_editor_basic.py b/taccsite_cms/management/commands/group_perms/media_editor_basic.py index d60b76386..256279b8c 100644 --- a/taccsite_cms/management/commands/group_perms/media_editor_basic.py +++ b/taccsite_cms/management/commands/group_perms/media_editor_basic.py @@ -4,7 +4,7 @@ from django.contrib.auth.models import Group -from .util import ( +from ..util import ( let_view_and_change_page_structure, let_view_and_change_media_plugins, let_view_and_change_adv_media_plugins, diff --git a/taccsite_cms/management/commands/group_perms/news_writer_advanced.py b/taccsite_cms/management/commands/group_perms/news_writer_advanced.py index bb56789b2..d26ba72b2 100644 --- a/taccsite_cms/management/commands/group_perms/news_writer_advanced.py +++ b/taccsite_cms/management/commands/group_perms/news_writer_advanced.py @@ -6,7 +6,7 @@ from django.contrib.auth.models import Group -from .util import ( +from ..util import ( add_perm, let_view_and_change_page_structure, let_view_and_change_plugin, diff --git a/taccsite_cms/management/commands/group_perms/news_writer_basic.py b/taccsite_cms/management/commands/group_perms/news_writer_basic.py index 925422ee4..eef009de2 100644 --- a/taccsite_cms/management/commands/group_perms/news_writer_basic.py +++ b/taccsite_cms/management/commands/group_perms/news_writer_basic.py @@ -4,7 +4,7 @@ from django.contrib.auth.models import Group -from .util import ( +from ..util import ( add_perm, let_view_and_change_page_structure, let_view_and_change_plugin, diff --git a/taccsite_cms/management/commands/group_perms/text_editor_advanced.py b/taccsite_cms/management/commands/group_perms/text_editor_advanced.py index f7458e247..b3fdfd2b9 100644 --- a/taccsite_cms/management/commands/group_perms/text_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/text_editor_advanced.py @@ -5,7 +5,7 @@ from django.contrib.auth.models import Group -from .util import ( +from ..util import ( let_view_and_change_page_structure, let_view_and_change_text, let_add_and_delete_text, diff --git a/taccsite_cms/management/commands/group_perms/text_editor_basic.py b/taccsite_cms/management/commands/group_perms/text_editor_basic.py index 12994f6a0..b9f207f8d 100644 --- a/taccsite_cms/management/commands/group_perms/text_editor_basic.py +++ b/taccsite_cms/management/commands/group_perms/text_editor_basic.py @@ -4,7 +4,7 @@ from django.contrib.auth.models import Group -from .util import ( +from ..util import ( let_view_and_change_page_structure, let_view_and_change_text, let_view_and_change_folder, diff --git a/taccsite_cms/management/commands/group_perms/util.py b/taccsite_cms/management/commands/util.py similarity index 100% rename from taccsite_cms/management/commands/group_perms/util.py rename to taccsite_cms/management/commands/util.py From 559290c81693a4441346f487489a3c41c4aa7c25 Mon Sep 17 00:00:00 2001 From: Wesley B <62723358+wesleyboar@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:52:05 -0600 Subject: [PATCH 07/13] docs: CMD-189 group descs, do not ref other groups The previous documentation would allow groups that reference other groups to become inaccurate when referenced group changes without updating referencing group --- .../management/commands/group_perms/grid_editor_advanced.py | 2 +- .../management/commands/group_perms/media_editor_advanced.py | 2 +- .../management/commands/group_perms/news_writer_advanced.py | 2 +- .../management/commands/group_perms/text_editor_advanced.py | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py b/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py index 05dc452a9..8ab2c0927 100644 --- a/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py @@ -1,5 +1,5 @@ """ -To do as much as `grid_editor_basic` +To edit layout (Containers, Rows, Columns) To add/delete layout (Containers, Rows, Columns) """ diff --git a/taccsite_cms/management/commands/group_perms/media_editor_advanced.py b/taccsite_cms/management/commands/group_perms/media_editor_advanced.py index 4d63fac22..2eabd9e11 100644 --- a/taccsite_cms/management/commands/group_perms/media_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/media_editor_advanced.py @@ -1,5 +1,5 @@ """ -To do as much as `media_editor_basic` +To edit images, videos, thumbnail sizes, and folders To add/delete images, videos, thumbnail sizes, and folders """ diff --git a/taccsite_cms/management/commands/group_perms/news_writer_advanced.py b/taccsite_cms/management/commands/group_perms/news_writer_advanced.py index d26ba72b2..18b8831bd 100644 --- a/taccsite_cms/management/commands/group_perms/news_writer_advanced.py +++ b/taccsite_cms/management/commands/group_perms/news_writer_advanced.py @@ -1,5 +1,5 @@ """ -To do as much as `news_writer_basic` +To edit/add Blog articles To edit/add/delete Blockquotes To add/delete news Categories and Tags """ diff --git a/taccsite_cms/management/commands/group_perms/text_editor_advanced.py b/taccsite_cms/management/commands/group_perms/text_editor_advanced.py index b3fdfd2b9..f494c02b3 100644 --- a/taccsite_cms/management/commands/group_perms/text_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/text_editor_advanced.py @@ -1,6 +1,6 @@ """ -To do as much as `text_editor_basic` -To add/delete textual elements, folders and files +To edit textual elements blocks, folders, and files +To add/delete textual elements, folders, and files """ from django.contrib.auth.models import Group From f830cf0d61584b8abae2a897ebab135dc01039c9 Mon Sep 17 00:00:00 2001 From: Wesley B <62723358+wesleyboar@users.noreply.github.com> Date: Tue, 10 Dec 2024 12:53:34 -0600 Subject: [PATCH 08/13] docs: CMD-189 reduce verbosity of descs --- .../management/commands/group_perms/grid_editor_advanced.py | 3 +-- .../management/commands/group_perms/media_editor_advanced.py | 3 +-- .../management/commands/group_perms/text_editor_advanced.py | 3 +-- 3 files changed, 3 insertions(+), 6 deletions(-) diff --git a/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py b/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py index 8ab2c0927..bb2ca61e6 100644 --- a/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/grid_editor_advanced.py @@ -1,6 +1,5 @@ """ -To edit layout (Containers, Rows, Columns) -To add/delete layout (Containers, Rows, Columns) +To edit/add/delete layout (Containers, Rows, Columns) """ from django.contrib.auth.models import Group diff --git a/taccsite_cms/management/commands/group_perms/media_editor_advanced.py b/taccsite_cms/management/commands/group_perms/media_editor_advanced.py index 2eabd9e11..d0d603754 100644 --- a/taccsite_cms/management/commands/group_perms/media_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/media_editor_advanced.py @@ -1,6 +1,5 @@ """ -To edit images, videos, thumbnail sizes, and folders -To add/delete images, videos, thumbnail sizes, and folders +To edit/add/delete images, videos, thumbnail sizes, and folders """ from django.contrib.auth.models import Group diff --git a/taccsite_cms/management/commands/group_perms/text_editor_advanced.py b/taccsite_cms/management/commands/group_perms/text_editor_advanced.py index f494c02b3..89ea00ea7 100644 --- a/taccsite_cms/management/commands/group_perms/text_editor_advanced.py +++ b/taccsite_cms/management/commands/group_perms/text_editor_advanced.py @@ -1,6 +1,5 @@ """ -To edit textual elements blocks, folders, and files -To add/delete textual elements, folders, and files +To edit/add/delete textual elements, folders, and files """ from django.contrib.auth.models import Group From edc31ed79b9cff4200fc475b374ed10c5b2dc054 Mon Sep 17 00:00:00 2001 From: Wesley B <62723358+wesleyboar@users.noreply.github.com> Date: Tue, 10 Dec 2024 13:27:08 -0600 Subject: [PATCH 09/13] docs: CMD-189 notes & polish --- taccsite_cms/management/commands/README.md | 77 +++++++++++++++------- 1 file changed, 55 insertions(+), 22 deletions(-) diff --git a/taccsite_cms/management/commands/README.md b/taccsite_cms/management/commands/README.md index 24cfee8de..0d69cd286 100644 --- a/taccsite_cms/management/commands/README.md +++ b/taccsite_cms/management/commands/README.md @@ -1,38 +1,69 @@ # Programmatically Add Groups & Permissions +- [Groups & Permissions](#groups--permissions) +- [Usage](#usage) +- [Develepment](#develepment) +- [Reference](#reference) + ## Groups & Permissions -See the description at the top of each file in [`group_perms/`](./group_perms). +Every file in [`group_perms/`](./group_perms) represents a group. Each group's intended usage is described at the top of its file. Permissions are set via function calls in each file.[^1] ## Usage -### Set Permissions +- [Add a Permissions Group](#add-a-permissions-group) +- [Debug a Command](#debug-a-command) +- [Assign Permissions to a User](#assign-permissions-to-a-user) + +### Add a Permissions Group -1. Login to the CMS admin. -2. Open a shell into the CMS container e.g. - `docker exec -it core_cms /bin/bash` -3. In the shell, run the group/permission command e.g. - `python manage.py set_group_perms news_writer_advanced` -4. Open the CMS admin interface e.g. +1. Open a shell into the CMS container e.g. + ```sh + docker exec -it core_cms /bin/bash + ``` +2. In the shell, run the group/permission command e.g. + ```sh + python manage.py set_group_perms news_writer_advanced grid_editor_basic + ``` +3. Open the CMS admin interface e.g. [https://localhost:8000/admin/auth/group](https://localhost:8000/admin/auth/group) -5. In the CMS admin, verify group permissions are as you intend. +4. Verify group permissions are as you intend. + +> **Note:** If group does not exist, this will **create** it. If group exists, this will **add** permissions to it, but will **not remove** permissions from it. ### Debug a Command -1. Open a shell into the CMS container e.g. `docker exec -it core_cms /bin/bash`. -2. In the shell, open a Python shell i.e. `python`. +1. Open a shell into the CMS container e.g. + ```sh + docker exec -it core_cms /bin/bash + ``` +2. In the shell, open a Python shell i.e. + ```sh + python + ``` 3. In the Python shell, run the following commands. + ```py + import os + import django + os.environ.setdefault("DJANGO_SETTINGS_MODULE", "taccsite_cms.settings") + django.setup() + ``` +4. Then run any additional debugging code or scripts you want to execute. + +### Assign Permissions to a User -```py -import os -import django -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "taccsite_cms.settings") -django.setup() -# any additional debugging code or scripts you want to execute -``` +Add the User to one or more groups.[^1] + +> **Warning:** +> If [`CMS_PERMISSION = True`](https://docs.django-cms.org/en/3.11.8/topics/permissions.html#permission-modes) ([default for Core-CMS](https://github.com/TACC/Core-CMS/blob/v4.21.0/taccsite_cms/settings.py#L164)), then assigning one of these groups to a user is **not enough** to allow them to edit a page. You must also give that user [Global or per-page permissions](https://docs.django-cms.org/en/3.11.8/topics/permissions.html#global-and-per-page-permissions); do so [via a group](https://docs.django-cms.org/en/3.11.8/topics/permissions.html#use-permissions-on-groups-not-on-users). ## Develepment +- [Create a New Group](#create-a-new-group) +- [Create a New Permission Set](#create-a-new-permission-set) + - [via Existing Set in this Code](#via-existing-set-in-this-code) + - [via Existing Group in CMS Admin](#via-existing-group-in-cms-admin) + ### Create a New Group 1. Duplicate an existing group. @@ -41,15 +72,15 @@ django.setup() ### Create a New Permission Set -### via Existing Set in this Code +#### via Existing Set in this Code 1. Duplicate an existing `let_*` function in [`util.py`](./util.py). 2. Rename the function. Rewrite its descritpion. 3. Assign the permission set to a relevant group. -### via Existing Group in CMS Admin +#### via Existing Group in CMS Admin -#### 1. Get Permissions from HTML +##### 1. Get Permissions from HTML You may **either** download an appropriate `.html` from [Django CMS - Developer Guide - User Permissions / Groups / Roles](https://tacc-main.atlassian.net/wiki/x/egtv) **or**: @@ -57,7 +88,7 @@ You may **either** download an appropriate `.html` from [Django CMS - Developer 2. Using the browser Developer Tools, copy the `