# Changelog

## Release 2.4.0 (May 24, 2021)

- Add support for Python 3.9

- Add support for Django 3.1, Django 3.2

- Add parameter any_perm to PermissionRequiredMixin

- Switch from Travis CI to GitHub Actions

## Release 2.3.0 (June 6, 2020)

- Drop support for Django 2.1

- Fix compatibility with UUIDField primary keys

- Fix formatting for pyupgrade

- Fix error with get_objects_for_user on PostgreSQL

- Modify ‘assign_perm’ shortcut to treat lists as a queryset

- Updated links to Django documentation and django-authority repository

- Removed reference to “easy_install” in the documentation

- Run migrations check only if required version of django is installed

## Release 2.2.0 (January 3, 2020)

- Add support for Django 3.0 and Python 3.8.

- Add support for custom generic object permission models.

- Don’t initialise anonymous user on DB where it’s not migrated.

- Allow object permissions with dots.

- Several performance improvements

    - Improve performance of `get_objects_for_user`

    - Update `get_users_with_perms` to avoid a large join

Important

The 2.2.x release line will be the last one that has support for Django 2.1.

## Release 2.1.0 (September 9, 2019)

- Upgrade to use ``django.urls.path`` in routing

    - Add admin support for user primary key as UUID

- Auto pre-fetching permission via ``GUARDIAN_AUTO_PREFETCH``

- Add tests for missing migrations

## Release 2.0.0 (June 11, 2019)

- Drop support for Python 2.7 & 3.4 and Django 1.11 & 2.0

## Release 1.5.1 (May 2, 2019)

- Restore compatibility with Python 2.7

Important

The 1.5.x release line will be the last one that has support for Python 2.7.

## Release 1.5.0 (Jan 31, 2019)

- Updates for compatibility with latest Python and Django versions.

## Release 1.4.9 (Jul 01, 2017)

- Drop `django_guardian.compat.OrderedDict` as a consequence of drop Python 1.6 earlier.

- Fix django admin 1.11 not showing selected permissions

- Add a optional checker variable to get_obj_perms

- Add missing classifiers in setup.py

## Release 1.4.8 (Apr 04, 2017)

- Improved performance of clean_orphan_obj_perms management command

- Use bumpversion for versioning.

- Enable Python 3.6 testing

- Python 2.7, 3.4, 3.5, 3.6 are only supported Python versions

- Django 1.8, 1.10, and 1.11 are only supported Django versions

- Added explicity on_delete to all ForeignKeys

## Release 1.4.6 (Sep 09, 2016)

- Improved performance of get_objects_for_user

- Added test-covered and documented guardian.mixins.PermissionListMixin

- Allow content type retrieval to be overridden fg. for django-polymorphic support

- Added support CreateView-like (no object) view in PermissionRequiredMixin

- Added django 1.10 to TravisCI and tox

- Run tests for example_project in TravisCI

- Require django 1.9+ for example_project (django-guardian core support django 1.7+)

- Fix django versions compatibility in example_project

- Drop django in install_requires of setuptools

## Release 1.4.5 (Aug 09, 2016)

- Fix caching issue with prefetch_perms.

- Convert readthedocs link for their .org -> .io migration for hosted projects

- Added example CRUD CBV project

- Added TEMPLATES in example_project settings

- Added Queryset support to assign_perm

- Added QuerySet support to remove_perm

- Updated assign_perm and remove_perm docstrings

- Moved queryset support in assign_perms to its own function

- Moved queryset support in remove_perms to its own function

- Consolidated {User,Group}ObjectPermissionManager, move logic of bulk_*_perm to managers

- assign_perm and remove_perm shortcuts accept Permission instance as perm and QuerySet as obj too.

- Consolidated bulk_assign_perm to assign_perm and bulk_remove_perm to remove_perm

- Upgraded Grappelli templates breadcrumbs block to new Django 1.9 and Grappelli 2.8 standards, including proper URLs and support for preserved_filters. Removed the duplicated field.errors in the field.html template file.

- Made UserManage/GroupManage forms overridable

- Fixed GuardedModelAdminMixin views render for Django 1.10

## Release 1.4.4 (Apr 04, 2016)

- Don’t install support example_project.

- Direct ForeignKey perms in prefetch_perms.

## Release 1.4.3 (Apr 03, 2016)

- guardian.VERSION should be a tuple, not a list. Fixes #411.

- Support for prefetching permissions.

- Fixed union between queries.

- Allow specifying an empty list of permissions for get_objects_for_group.

- Mixed group and user direction relations broken. Fixes #271.

- Lookup anonymous user using custom username field.

- Fix up processing of ANONYMOUS_USER_NAME where set to None. Fixes #409.

- Require TEMPLATE_403 to exist if RENDER_403 set.

## Release 1.4.2 (Mar 09, 2016)

- Test against django-master (Django 1.10 - not released).

- Django 1.10 fixes.

- Fixes for documentation.

- PEP8 fixes.

- Fix distributed files in MANIFEST.in

- Use pytest for tests.

- Add dependancy on django-environ.

- Don’t use ANONYMOUS_USER_ID. Uses ANONYMOUS_DEFAULT_USERNAME and USERNAME_FIELD instead.

- Use setuptools_scm for versioning.

- Initialise admin context using each_context for Django >= 1.8.

- Add missing with_superusers parameter to get_users_with_perms().

- Use setuptools scm for versioning.

- Fixes for example_project.

- Only display permissions if permission actually assigned.

- When using attach_perms with get_users_with_perms, and with_group_users and with_superusers set to False, only directly assigned permissions are now returned, and not effective (infered) permissions.

## Release 1.4.1 (Jan 10, 2016)

- Fix broken documentation.

- Fix setup.py errors (#387).

- Fix tox tests.

- Fix travis tests.

## Release 1.4.0 (Jan 8, 2016)

- Drop support for Django < 1.7

- Drop support for django south migrations.

- Remove depreciated code.

- Fix many Django depreciated warnings.

- Fix tests and example_project.

- Work around for postgresql specific Django bug (#366). This is a regression that was introduced in version 1.3.2.

- Updates to documentation.

- Require can_change permission to change object perms in admin.

- Fixes broke admin URLS (#376 and #381).

- Tests now work with Mysql and Postgresql as well as sqlite.

- Uses django-environ for tests.

## Release 1.3.2 (Nov 14, 2015)

- Fixes tests for all versions of Django.

- Tests pass for Django 1.9b1.

- Drops support for Django < 1.5

- Add Russian translation.

- Various bug fixes.

- Ensure password for anonymous user is set to unusable, not None.

## Release 1.3.1 (Oct 20, 2015)

- Fixes for 1.8 compat

## Release 1.3 (Jun 3, 2015)

- Official Django 1.8 support (thanks to multiple contributors)

## Release 1.2.5 (Dec 28, 2014)

- Official Django 1.7 support (thanks Troy Grosfield and Brian May)

- Allow to override `PermissionRequiredMixin.get_permission_object`, part of `PermissionRequiredMixin.check_permissions` method, responsible for retrieving single object (Thanks zauddelig)

- French translations (Thanks Morgan Aubert)

- Added support for `User.get_all_permissions` (thanks Michael Drescher)

## Release 1.2.4 (Jul 14, 2014)

- Fixed another issue with custom primary keys at admin extensions (Thanks Omer Katz)

## Release 1.2.3 (Jul 14, 2014)

Unfortunately this was broken release not including any important changes.

## Release 1.2.2 (Jul 2, 2014)

- Fixed issue with custom primary keys at admin extensions (Thanks Omer Katz)

- `get_403_or_None` now accepts Python path to the view function, for example `'django.contrib.auth.views.login'` (Thanks Warren Volz)

- Added `with_superuser` flag to `guardian.shortcuts.get_objects_for_user` (Thanks Bruno Ribeiro da Silva)

- Added possibility to disable monkey patching of the `User` model. (Thanks Cezar Jenkins)

## Release 1.2 (Mar 7, 2014)

- Removed `get_for_object` methods from managers (#188)

- Extended documentation

- GuardedModelAdmin has been splitted into mixins

- Faster queries in get_objects_for_user when use_groups=False or any_perm=True (#148)

- Improved speed of get_objects_for_user shortcut

- Support for custom User model with not default username field

- Added GUARDIAN_GET_INIT_ANONYMOUS_USER setting (#179)

- Added `accept_global_perms` to `PermissionRequiredMixin`

- Added brazilian portuguese translations

- Added polish translations

- Added `wheel` support

- Fixed wrong anonymous user checks

- Support for Django 1.6

- Support for Django 1.7 alpha

Important

In this release we have removed undocumented `get_for_object` method from both `UserObjectPermissionManager` and `GroupObjectPermissionManager`. Not deprecated, removed. Those methods were not used within `django-guardian` and their odd names could lead to issues if user would believe they would return object level permissions associated with user/group and object passed as the input. If you depend on those methods, you’d need to stick with version 1.1 and make sure you do not misuse them.

## Release 1.1 (May 26, 2013)

- Support for Django 1.5 (including Python 3 combination)

- Support for custom user models (introduced by Django 1.5)

- Ability to create permissions using Foreign Keys

- Added `user_can_access_owned_by_group_objects_only` option to `GuardedModelAdmin.`

- Minor documentation fixups

- Spanish translations

- Better support for grappelli

- Updated examples project

- Speed up `get_perms` shortcut function

## Release 1.0.4 (Jul 15, 2012)

- Added `GUARDIAN_RENDER_403` and `GUARDIAN_RAISE_403` settings (#40)

- Updated docstring for `get_obj_perms` (#43)

- Updated codes to run with newest django-grappelli (#51)

- Fixed problem with building a RPM package (#50)

- Updated caveats docs related with oprhaned object permissions (#47)

- Updated `permission_required` docstring (#49)

- Added `accept_global_perms` for decorators (#49)

- Fixed problem with MySQL and booleans (#56)

- Added flag to check for any permission in `get_objects_for_user` and `get_objects_for_group` (#65)

- Added missing tag closing at template (#63)

- Added view mixins related with authorization and authentication (#73)

- Added tox support

- Added Travis support

## Release 1.0.3 (Jul 25, 2011)

- Added `get_objects_for_group` shortcut (thanks to Rafael Ponieman)

- Added `user_can_access_owned_objects_only` flag to `GuardedModelAdmin`

- Updated and fixed issues with example app (thanks to Bojan Mihelac)

- Minor typo fixed at documentation

- Included ADC theme for documentation

## Release 1.0.2 (Apr 12, 2011)

- `get_users_with_perms` now accepts `with_group_users` flag

- Fixed `group_id` issue at admin templates

- Small fix for documentation building process

- It’s 2011 (updated dates within this file)

## Release 1.0.1 (Mar 25, 2011)

- `get_users_with_perms` now accepts `with_superusers` flag

- Small fix for documentation building process

## Release 1.0.0 (Jan 27, 2011)

- A final v1.0 release!

## Release 1.0.0.beta2 (Jan 14, 2011)

- Added `get_objects_for_user` shortcut function

- Added few tests

- Fixed issues related with `django.contrib.auth` tests

- Removed example project from source distribution

## Release 1.0.0.beta1 (Jan 11, 2011)

- Simplified example project

- Fixed issues related with test suite

- Added ability to clear orphaned object permissions

- Added `clean_orphan_obj_perms` management command

- Documentation cleanup

- Added grappelli admin templates

## Release 1.0.0.alpha2 (Dec 2, 2010)

- Added possibility to operate with global permissions for assign and `remove_perm` shortcut functions

- Added possibility to generate PDF documentation

- Fixed some tests

## Release 1.0.0.alpha1 (Nov 23, 2010)

- Fixed admin templates not included in `MANIFEST.in`

- Fixed admin integration codes

## Release 1.0.0.pre (Nov 23, 2010)

- Added admin integration

- Added reusable forms for object permissions management

## Release 0.2.3 (Nov 17, 2010)

- Added `guardian.shortcuts.get_users_with_perms` function

- Added `AUTHORS` file

## Release 0.2.2 (Oct 19, 2010)

- Fixed migrations order (thanks to Daniel Rech)

## Release 0.2.1 (Oct 3, 2010)

- Fixed migration (it wasn’t actually updating object_pk field)

## Release 0.2.0 (Oct 3, 2010)

### Fixes

- #4: guardian now supports models with not-integer primary keys and they don’t need to be called “id”.

  Important

  For 0.1.X users: it is required to migrate guardian in your projects. Add `south` to `INSTALLED_APPS` and run:

      python manage.py syncdb
      python manage.py migrate guardian 0001 --fake
      python manage.py migrate guardian

### Improvements

- Added South migrations support

## Release 0.1.1 (Sep 27, 2010)

### Improvements

- Added view decorators: `permission_required` and `permission_required_403`

## Release 0.1.0 (Jun 6, 2010)

- Initial public release