about summary refs log tree commit diff
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2025-06-09 12:50:44 -0500
committerFrederick Muriuki Muriithi2025-06-09 12:50:44 -0500
commit183076a4ae6b7d0f7e8c5369111ae79e5cad04ba (patch)
tree70c43a2b4a1a5ac3f762acc71d1602b9023f9127
parent09b7fd69c6d71b37403de4bb0d97f547db0b9fca (diff)
downloadgn-auth-183076a4ae6b7d0f7e8c5369111ae79e5cad04ba.tar.gz
Add function to fetch the wrapper resource for a specific group.
-rw-r--r--gn_auth/auth/authorisation/resources/groups/models.py25
1 files changed, 24 insertions, 1 deletions
diff --git a/gn_auth/auth/authorisation/resources/groups/models.py b/gn_auth/auth/authorisation/resources/groups/models.py
index fa25594..29dcc89 100644
--- a/gn_auth/auth/authorisation/resources/groups/models.py
+++ b/gn_auth/auth/authorisation/resources/groups/models.py
@@ -16,8 +16,10 @@ from gn_auth.auth.authentication.users import User, user_by_id
 
 from gn_auth.auth.authorisation.checks import authorised_p
 from gn_auth.auth.authorisation.privileges import Privilege
-from gn_auth.auth.authorisation.resources.base import Resource
 from gn_auth.auth.authorisation.resources.errors import MissingGroupError
+from gn_auth.auth.authorisation.resources.base import (
+    Resource,
+    resource_from_dbrow)
 from gn_auth.auth.errors import (
     NotFoundError, AuthorisationError, InconsistencyError)
 from gn_auth.auth.authorisation.roles.models import (
@@ -519,3 +521,24 @@ def admin_group(conn: db.DbConnection) -> Either:
                 row["group_name"],
                 json.loads(row["group_metadata"]))),
             cursor.fetchone())
+
+
+def group_resource(conn: db.DbConnection, group_id: UUID) -> Group:
+    """Retrieve the system resource."""
+    with db.cursor(conn) as cursor:
+        cursor.execute(
+            "SELECT group_resources.group_id, resource_categories.*, "
+            "resources.resource_id, resources.resource_name, resources.public "
+            "FROM group_resources INNER JOIN resources "
+            "ON group_resources.resource_id=resources.resource_id "
+            "INNER JOIN resource_categories "
+            "ON resources.resource_category_id=resource_categories.resource_category_id "
+            "WHERE group_resources.group_id=? "
+            "AND resource_categories.resource_category_key='group'",
+            (str(group_id),))
+        row = cursor.fetchone()
+        if row:
+            return resource_from_dbrow(row)
+
+    raise NotFoundError("Could not find a resource for group with ID "
+                        f"{group_id}")