diff --git a/django_prbac/arbitrary.py b/django_prbac/arbitrary.py index fd162c4..a3578cf 100644 --- a/django_prbac/arbitrary.py +++ b/django_prbac/arbitrary.py @@ -1,7 +1,9 @@ import uuid from random import choice -from django.contrib.auth.models import User +from django.contrib.auth import get_user_model + +User = get_user_model() from django_prbac.models import * diff --git a/django_prbac/migrations/0002_auto_20210930_1858.py b/django_prbac/migrations/0002_auto_20210930_1858.py new file mode 100644 index 0000000..1b1eb24 --- /dev/null +++ b/django_prbac/migrations/0002_auto_20210930_1858.py @@ -0,0 +1,19 @@ +# Generated by Django 2.2.24 on 2021-09-30 18:58 + +from django.db import migrations +import django_jsonfield_backport.models + + +class Migration(migrations.Migration): + + dependencies = [ + ('django_prbac', '0001_initial'), + ] + + operations = [ + migrations.AlterField( + model_name='grant', + name='assignment', + field=django_jsonfield_backport.models.JSONField(blank=True, default=dict, help_text='Assignment from parameters (strings) to values (any JSON-compatible value)'), + ), + ] diff --git a/django_prbac/models.py b/django_prbac/models.py index 0f88fd3..a58d5b8 100644 --- a/django_prbac/models.py +++ b/django_prbac/models.py @@ -10,9 +10,8 @@ def python_2_unicode_compatible(fn): return fn -import jsonfield - from django_prbac.fields import StringSetField +from django_jsonfield_backport.models import JSONField __all__ = [ @@ -208,7 +207,7 @@ class Grant(ValidatingModel, models.Model): on_delete=models.CASCADE, ) - assignment = jsonfield.JSONField( + assignment = JSONField( help_text='Assignment from parameters (strings) to values (any JSON-compatible value)', blank=True, default=dict, diff --git a/django_prbac/tests/test_models.py b/django_prbac/tests/test_models.py index ef0bb1d..f9621df 100644 --- a/django_prbac/tests/test_models.py +++ b/django_prbac/tests/test_models.py @@ -1,6 +1,6 @@ from django.test import TestCase # https://code.djangoproject.com/ticket/20913 -from django_prbac.models import Role +from django_prbac.models import Role, Grant from django_prbac import arbitrary @@ -95,6 +95,18 @@ def test_instantiated_to_role_smoke_test(self): grant = arbitrary.grant(to_role=superrole, assignment={'two': 'goodbye'}) self.assertEqual(grant.instantiated_to_role({}).assignment, {}) + def test_query_grant_assignments(self): + """ + Test we can search grants using features in newer JSONField + """ + + user = arbitrary.role() + privilege = arbitrary.role(parameters={'thing'}) + for thing in ['thingone', 'thingtwo']: + arbitrary.grant(to_role=privilege, from_role=user, assignment={'thing': thing}) + + assert Grant.objects.filter(from_role=user, assignment__thing='thingone').count() == 1 + class TestUserRole(TestCase): diff --git a/setup.py b/setup.py index 4bb77f0..deb0222 100644 --- a/setup.py +++ b/setup.py @@ -33,7 +33,7 @@ def get_readme(): # avoid django 2 <2.2.10 and django 3 < 3.0.7 # https://github.com/advisories/GHSA-hmr4-m2h5-33qx 'django>=2.2.13,!=3.0.0,!=3.0.1,!=3.0.2,!=3.0.3,!=3.0.4,!=3.0.5,!=3.0.6,<4', - 'jsonfield>=1.0.3,<4', + 'django-jsonfield-backport>=1.0,<2', 'simplejson', ], classifiers=[