diff options
Diffstat (limited to 'gn3/auth/authorisation/privileges.py')
-rw-r--r-- | gn3/auth/authorisation/privileges.py | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/gn3/auth/authorisation/privileges.py b/gn3/auth/authorisation/privileges.py index 99b36ef..c60a58c 100644 --- a/gn3/auth/authorisation/privileges.py +++ b/gn3/auth/authorisation/privileges.py @@ -1,16 +1,24 @@ """Handle privileges""" from uuid import UUID +from typing import Iterable, NamedTuple from gn3.auth import db -def user_privileges(conn, user_id: UUID): +class Privilege(NamedTuple): + """Class representing a privilege: creates immutable objects.""" + privilege_id: UUID + privilege_name: str + +def user_privileges(conn: db.DbConnection, user_id: UUID) -> Iterable[Privilege]: """Fetch the user's privileges from the database.""" with db.cursor(conn) as cursor: cursor.execute( - ("SELECT p.privilege_name " + ("SELECT p.privilege_id, p.privilege_name " "FROM user_roles AS ur " "INNER JOIN role_privileges AS rp ON ur.role_id=rp.role_id " "INNER JOIN privileges AS p ON rp.privilege_id=p.privilege_id " "WHERE ur.user_id=?"), (str(user_id),)) - return tuple(row[0] for row in cursor.fetchall()) + results = cursor.fetchall() + + return (Privilege(row[0], row[1]) for row in results) |