@@ -18,7 +18,7 @@ use sea_orm::prelude::Expr;
1818use sea_orm:: query:: * ;
1919use std:: collections:: { BTreeMap , HashMap } ;
2020
21- use crate :: assignment:: backends:: error:: AssignmentDatabaseError ;
21+ use crate :: assignment:: backends:: error:: { AssignmentDatabaseError , db_err } ;
2222use crate :: assignment:: types:: * ;
2323use crate :: config:: Config ;
2424use crate :: db:: entity:: {
@@ -71,15 +71,19 @@ pub async fn list(
7171 }
7272
7373 let results: Result < Vec < Assignment > , _ > = if let Some ( true ) = & params. include_names {
74- let db_assignments: Vec < ( db_assignment:: Model , Option < db_role:: Model > ) > =
75- select_assignment. find_also_related ( DbRole ) . all ( db) . await ?;
74+ let db_assignments: Vec < ( db_assignment:: Model , Option < db_role:: Model > ) > = select_assignment
75+ . find_also_related ( DbRole )
76+ . all ( db)
77+ . await
78+ . map_err ( |err| db_err ( err, "fetching role assignments with roles" ) ) ?;
7679 let db_system_assignments: Vec < ( db_system_assignment:: Model , Option < db_role:: Model > ) > =
7780 if params. project_id . is_none ( ) && params. domain_id . is_none ( ) {
7881 // get system scope assignments only when no project or domain is specified
7982 select_system_assignment
8083 . find_also_related ( DbRole )
8184 . all ( db)
82- . await ?
85+ . await
86+ . map_err ( |err| db_err ( err, "fetching system role assignments with roles" ) ) ?
8387 } else {
8488 Vec :: new ( )
8589 } ;
@@ -93,11 +97,17 @@ pub async fn list(
9397 )
9498 . collect ( )
9599 } else {
96- let db_assignments: Vec < db_assignment:: Model > = select_assignment. all ( db) . await ?;
100+ let db_assignments: Vec < db_assignment:: Model > = select_assignment
101+ . all ( db)
102+ . await
103+ . map_err ( |err| db_err ( err, "fetching role assignments" ) ) ?;
97104 let db_system_assignments: Vec < db_system_assignment:: Model > =
98105 if params. project_id . is_none ( ) && params. domain_id . is_none ( ) {
99106 // get system scope assignments only when no project or domain is specified
100- select_system_assignment. all ( db) . await ?
107+ select_system_assignment
108+ . all ( db)
109+ . await
110+ . map_err ( |err| db_err ( err, "fetching system role assignments" ) ) ?
101111 } else {
102112 Vec :: new ( )
103113 } ;
@@ -153,7 +163,12 @@ pub async fn list_for_multiple_actors_and_targets(
153163
154164 let mut db_assignments: BTreeMap < String , db_assignment:: Model > = BTreeMap :: new ( ) ;
155165 // Get assignments resolving the roles inference
156- for assignment in select. all ( db) . await ? {
166+ for assignment in select. all ( db) . await . map_err ( |err| {
167+ db_err (
168+ err,
169+ "fetching role assignments for multiple actors and targets" ,
170+ )
171+ } ) ? {
157172 db_assignments. insert ( assignment. role_id . clone ( ) , assignment. clone ( ) ) ;
158173 if let Some ( implies) = imply_rules. get ( & assignment. role_id ) {
159174 let mut implied_assignment = assignment. clone ( ) ;
@@ -173,7 +188,8 @@ pub async fn list_for_multiple_actors_and_targets(
173188 . filter ( Expr :: col ( db_role:: Column :: Id ) . is_in ( db_assignments. keys ( ) ) )
174189 . into_tuple ( )
175190 . all ( db)
176- . await ?,
191+ . await
192+ . map_err ( |err| db_err ( err, "fetching roles by ids" ) ) ?,
177193 ) ;
178194 let results: Result < Vec < Assignment > , _ > = db_assignments
179195 . values ( )
0 commit comments