From 7f4bc62ddf828c44eb5f35997fdbbe58d3cc0df2 Mon Sep 17 00:00:00 2001 From: Cristopher Hernandez <22552070+CristopherH95@users.noreply.github.com> Date: Fri, 19 Sep 2025 13:54:38 -0700 Subject: [PATCH 1/3] Add async methods to backend --- rules/permissions.py | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/rules/permissions.py b/rules/permissions.py index 9dda1a0..bb31416 100644 --- a/rules/permissions.py +++ b/rules/permissions.py @@ -1,3 +1,4 @@ +from asgiref.sync import sync_to_async from .rulesets import RuleSet permissions = RuleSet() @@ -32,3 +33,9 @@ def has_perm(self, user, perm, *args, **kwargs): def has_module_perms(self, user, app_label): return has_perm(app_label, user) + + async def ahas_perm(self, user, perm, *args, **kwargs): + return await sync_to_async(has_perm)(user, perm, *args, **kwargs) + + async def ahas_module_perms(self, user, app_label): + return await sync_to_async(has_perm)(app_label, user) From 60689b66eb867782480589dedef18ff2343efbfd Mon Sep 17 00:00:00 2001 From: Cristopher Hernandez <22552070+CristopherH95@users.noreply.github.com> Date: Fri, 19 Sep 2025 14:03:23 -0700 Subject: [PATCH 2/3] Add async test case --- tests/testsuite/test_permissions.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/tests/testsuite/test_permissions.py b/tests/testsuite/test_permissions.py index c392647..4b78936 100644 --- a/tests/testsuite/test_permissions.py +++ b/tests/testsuite/test_permissions.py @@ -1,3 +1,4 @@ +from asgiref.sync import sync_to_async from unittest import TestCase from rules.permissions import ( @@ -50,3 +51,17 @@ def test_backend(self): assert not backend.has_perm(None, "can_edit_book") remove_perm("can_edit_book") assert not perm_exists("can_edit_book") + + async def test_backend_async(self): + backend = ObjectPermissionBackend() + + await sync_to_async(add_perm)("can_edit_book", always_true) + assert "can_edit_book" in permissions + assert await backend.ahas_perm(None, "can_edit_book") + assert await backend.ahas_module_perms(None, "can_edit_book") + with self.assertRaises(KeyError): + await sync_to_async(add_perm)("can_edit_book", always_true) + await sync_to_async(set_perm)("can_edit_book", always_false) + assert not await backend.ahas_perm(None, "can_edit_book") + await sync_to_async(remove_perm)("can_edit_book") + assert not await sync_to_async(perm_exists)("can_edit_book") From ee289aa002a0c05d1305c9982765bee2c0b99008 Mon Sep 17 00:00:00 2001 From: Cristopher Hernandez <22552070+CristopherH95@users.noreply.github.com> Date: Sun, 21 Sep 2025 21:53:52 -0700 Subject: [PATCH 3/3] Update module sort --- rules/permissions.py | 1 + tests/testsuite/test_permissions.py | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/rules/permissions.py b/rules/permissions.py index bb31416..e2f4fe3 100644 --- a/rules/permissions.py +++ b/rules/permissions.py @@ -1,4 +1,5 @@ from asgiref.sync import sync_to_async + from .rulesets import RuleSet permissions = RuleSet() diff --git a/tests/testsuite/test_permissions.py b/tests/testsuite/test_permissions.py index 4b78936..f361c8a 100644 --- a/tests/testsuite/test_permissions.py +++ b/tests/testsuite/test_permissions.py @@ -1,6 +1,7 @@ -from asgiref.sync import sync_to_async from unittest import TestCase +from asgiref.sync import sync_to_async + from rules.permissions import ( ObjectPermissionBackend, add_perm,