#29843: Create permissions using migration operations rather than using the
post_migrate signal
-------------------------------------+-------------------------------------
Reporter: Petter Strandmark | Owner: Arthur
Type: | Rio
Cleanup/optimization | Status: assigned
Component: contrib.auth | Version: 2.1
Severity: Normal | Resolution:
Keywords: contenttypes | Triage Stage: Accepted
permissions post_migrate |
Has patch: 0 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by Arthur Rio):
* owner: nobody => Arthur Rio
* keywords: => contenttypes permissions post_migrate
* status: new => assigned
Comment:
I don't think we can solve the ticket for permissions unless we fix it for
content types as well. The creation/deletion/renaming of permissions and
content types should happen in the `makemigrations` phase as opposed to
using a `post_migrate` signal.
I suggest renaming this ticket to "Manage content types and permissions
using migration operations rather than using the post_migrate signal",
what do you think?
The approach would be:
- Add a `pre_makemigrations_write` signal, triggered right before the
migrations are written to file
- Content Type would register to that signal and insert operations if a
model is created, deleted or renamed. If any operation is inserted, it
would add itself to the dependencies of the migration
- Add a `post_contenttypes_insert_migrations` signal, triggered if any
content type operation is inserted
- Permissions would register to that signal and insert operations if a
model is created or deleted, or if any of the permissions of the model
have changed (default or custom). If any operation is inserted, it would
add itself to the dependencies of the migration
That way all the operations are part of the migration files and subsequent
migration operations can use the new or updated permissions/content types.
Also, it would handle having only `django.contrib.contenttypes` setup in
the `INSTALLED_APPS` (i.e. not `django.contrib.auth`). I might be missing
some edge cases, so any feedback would be appreciated.
Finally, I'm not sure yet how to handle adding `django.contrib.auth` and
`django.contrib.contenttypes` to the `INSTALLED_APPS` after migrations
were already created for other models, but I think that we could keep the
`post_migrate` signal in place to perform insert operations if
`0001_initial` is part of the plan.
--
Ticket URL: <https://code.djangoproject.com/ticket/29843#comment:4>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/065.6468a01ce132da85d4ec937ba7d857c1%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.