Skip to main content

Publisher workflow for django models and Django CMS pages.

Project description

Publisher workflow for django models and Django CMS pages.

This is a fork of andersinno/django-model-publisher-ai which is a fork of the origin jp74/django-model-publisher.

Build Status on travis-ci.org

travis-ci.org/wearehoods/django-ya-model-publisher

Coverage Status on codecov.io

codecov.io/gh/wearehoods/django-ya-model-publisher

Coverage Status on coveralls.io

coveralls.io/r/wearehoods/django-ya-model-publisher

Features

  • Django CMS page support.

  • Add request/reject buttons in Django CMS toolbar.

  • Django CMS placeholders support.

  • Hvad/Parler support.

  • Restrict user access to publish functions with user permissions.

base info

We have these three user types:

  • A user with only a few rights (we call it ‘reporter’)

  • A user with more rights (We call it ‘editor’)

  • The superuser with all rights

The user case is following:

  • ‘reporter’:

    • can only change draft content

    • can’t change public content

    • can’t delete publisher model entries or CMS pages.

    • can send a (un-)publish request to the ‘editor’ with a text node.

  • ‘editor’:

    • can response open publishing request from ‘reporter’.

    • can change drafts and public content, but only if there is no pending request.

    • can delete publisher model entries or CMS pages.

    • can’t delete/manipulate publisher state model entries.

permissions

Permissions for ‘reporter’ who can only create (un-)publish requests:

...
[ ] cms.publish_page
...
[*] cms.add_page
[*] cms.change_page
[ ] cms.delete_page
...
[ ] publisher.add_publisherstatemodel
[*] publisher.change_publisherstatemodel
[ ] publisher.delete_publisherstatemodel
...
[ ] <app_name>.can_publish_<model_name>
...
[*] <app_name>.add_<model_name>
[*] <app_name>.change_<model_name>
[ ] <app_name>.delete_<model_name>
...

Permissions for ‘editor’ who can accept/reject (un-)publish requests:

...
[*] cms.publish_page
...
[*] cms.add_page
[*] cms.change_page
[*] cms.delete_page
...
[ ] publisher.add_publisherstatemodel
[*] publisher.change_publisherstatemodel
[ ] publisher.delete_publisherstatemodel
...
[*] <app_name>.can_publish_<model_name>
...
[*] <app_name>.add_<model_name>
[*] <app_name>.change_<model_name>
[*] <app_name>.delete_<model_name>
...

Important: To prevent a privilege escalation, both users must not have access to these models:

  • django.contrib.auth.models.Permission

  • django.contrib.auth.models.Group

  • cms.models.PagePermission

Test users:

See user permission tests in:

Django compatibility

django-ya-model-publisher

django version

python

>=v0.5.x

1.8, 1.9, 1.10, 1.11

3.5, 3.6

v0.4.x

1.8, 1.9, 1.10, 1.11

2.7, 3.4, 3.5, 3.6

Note: See travis/tox config files for current test matrix

run tests

run tests via py.test with current python/environment:

$ make test
or
$ ./setup.py test
or
$ python tests/manage.py test myapp

run test via tox e.g.:

$ make tox
or
$ ./setup.py tox
or
$ tox

run test project

You can run the test environment by:

$ ./run_test_project_dev_server.sh

or:

$ ./publisher_test_project/manage.py run_test_project_dev_server

The following steps will be executed:

  • Create django users if not exists:

    • A django ‘superuser’

    • The user editor: He can accept/reject un-/publish requests

    • The user reporter: He can create un-/publish requests

    • note: Both users will used the same password as the ‘superuser’ !

  • run migration

  • insert test fixtures (Create Django CMS pages)

  • collect static files

  • run the django development server on localhost

You can pass arguments to the helper script, e.g.:

$ ./run_test_project_dev_server.sh --help
...
usage: manage.py run_test_project_dev_server [-h] [--version] [-v {0,1,2,3}]
                                             [--settings SETTINGS]
                                             [--pythonpath PYTHONPATH]
                                             [--traceback] [--no-color]
                                             [--ipv6] [--nothreading]
                                             [--noreload] [--nostatic]
                                             [--insecure]
                                             [addrport]
...

To ‘reset’ the test fixtures, run this:

$ ./publisher_test_project/manage.py create_test_data --fresh

For a complete fresh database, just remove the sqlite file, e.g.:

$ rm publisher_test_project/publisher_test_database.sqlite3

Backwards-incompatible changes

v0.6.0

The permission names changed! Please update your django user permissions, too.

These permissions are removed:

  • direct_publisher

  • ask_publisher_request

  • reply_publisher_request

Please read the information above.

history

  • v0.6.0 - 27.12.2017 - compare v0.5.1…v0.6.0

    • refactor permissions and publisher workflow

    • NEW: publisher.views.PublisherCmsViewMixin

    • NEW: publisher.admin.VisibilityMixin

    • bugfix django v1.11 compatibility

    • Expand tests with publisher_test_project.publisher_list_app

  • v0.5.1 - 20.12.2017 - compare v0.5.0…v0.5.1

    • fix python package (add missing parts)

    • change travis/tox/pytest configuration

    • minor code update

  • v0.5.0 - 19.12.2017 - compare v0.4.1…v0.5.0

    • Skip official support for python v2.7 and v3.4 (remove from text matrix)

    • Implement “request/reject/accept publishing” workflow with a shot messages and logging

    • Add “request/reject/accept publishing” buttons to Django CMS toolbar for cms pages.

  • v0.4.1 - 14.11.2017 - compare v0.4.0.dev1…v0.4.1

    • Refactor test run setup

    • bugfix project name

  • v0.4.0.dev1 - 14.11.2017 - compare v0.3.1…v0.4.0.dev1

donation

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-ya-model-publisher-0.6.0.tar.gz (64.1 kB view details)

Uploaded Source

Built Distributions

django_ya_model_publisher-0.6.0-py3.5.egg (78.8 kB view details)

Uploaded Source

django_ya_model_publisher-0.6.0-py2.py3-none-any.whl (85.8 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-ya-model-publisher-0.6.0.tar.gz.

File metadata

File hashes

Hashes for django-ya-model-publisher-0.6.0.tar.gz
Algorithm Hash digest
SHA256 70b95945016521ef40d73d7b71b5a4cd6e7ae9f0c999395548a86a1775ac1cad
MD5 089ecc6e6414e5b00a33d240dacfc989
BLAKE2b-256 2ad5a3b6c20401c52a8624ecc96a6711a31460a8851aea053c2cfb3d259efcc8

See more details on using hashes here.

File details

Details for the file django_ya_model_publisher-0.6.0-py3.5.egg.

File metadata

File hashes

Hashes for django_ya_model_publisher-0.6.0-py3.5.egg
Algorithm Hash digest
SHA256 cbba98408b5429fffc3d8a8593d0401741cab19016bdd443aed776e7105564ff
MD5 6276d90b8fdaef7ebce51f85b618be1c
BLAKE2b-256 526193a4e00881f82b5daac2e95356fc0ecbedcc276a66221523c10cfa97b724

See more details on using hashes here.

File details

Details for the file django_ya_model_publisher-0.6.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_ya_model_publisher-0.6.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 5dcc25a8604399e2d100f8fe02cc0b32ec6a5cca72612b2a9017556ccdef77f2
MD5 ad9852a0dc64c1b3e1b8ea48374b84e4
BLAKE2b-256 70fd252ea962f80ad4327b6ca9ea7e35d1beac11693a5156f5deea1d6024e70a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page