aboutsummaryrefslogtreecommitdiff
path: root/gn3/auth/authorisation/groups.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2022-12-08 06:22:23 +0300
committerFrederick Muriuki Muriithi2022-12-08 08:35:42 +0300
commit2be81e59ff416cb8764aaf041a3b8febae4d8875 (patch)
treebf1b8c76c817041fc627dbc8b319d65c69e3fefc /gn3/auth/authorisation/groups.py
parentb939c1fc96398708accc84c3026ce9f48654d7a8 (diff)
downloadgenenetwork3-2be81e59ff416cb8764aaf041a3b8febae4d8875.tar.gz
auth: add function to retrieve a user's group
* gn3/auth/authorisation/groups.py: new `user_group` function * tests/unit/auth/test_groups.py: test `user_group` function
Diffstat (limited to 'gn3/auth/authorisation/groups.py')
-rw-r--r--gn3/auth/authorisation/groups.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/gn3/auth/authorisation/groups.py b/gn3/auth/authorisation/groups.py
index 6496e87..743e812 100644
--- a/gn3/auth/authorisation/groups.py
+++ b/gn3/auth/authorisation/groups.py
@@ -106,3 +106,21 @@ def authenticated_user_group(conn) -> Maybe:
return Just(groups[0])
return Nothing
+
+def user_group(conn: db.DbConnection, user: User) -> Maybe:
+ """Returns the given user's group"""
+ with db.cursor(conn) as cursor:
+ cursor.execute(
+ ("SELECT groups.group_id, groups.group_name FROM group_users "
+ "INNER JOIN groups ON group_users.group_id=groups.group_id "
+ "WHERE group_users.user_id = ?"),
+ (str(user.user_id),))
+ groups = tuple(Group(UUID(row[0]), row[1]) for row in cursor.fetchall())
+
+ if len(groups) > 1:
+ raise MembershipError(user, groups)
+
+ if len(groups) == 1:
+ return Just(groups[0])
+
+ return Nothing