@@ -3,7 +3,7 @@ use std::ops::Deref;
33use async_trait:: async_trait;
44#[ cfg( feature = "plus" ) ]
55use bencher_json:: system:: payment:: JsonCustomer ;
6- use bencher_json:: { Email , Jwt , Sanitize } ;
6+ use bencher_json:: { Jwt , Sanitize } ;
77use bencher_rbac:: {
88 server:: Permission ,
99 user:: { OrganizationRoles , ProjectRoles } ,
@@ -24,7 +24,7 @@ use crate::{
2424 schema,
2525} ;
2626
27- use super :: { QueryUser , UserId } ;
27+ use super :: QueryUser ;
2828
2929#[ derive( Debug , Clone ) ]
3030pub struct AuthUser {
@@ -71,10 +71,18 @@ impl AuthUser {
7171 // Hold the connection for all permissions related queries
7272 let conn = conn_lock ! ( context) ;
7373 let query_user = QueryUser :: get_with_email ( conn, email) ?;
74+ Self :: load ( conn, query_user)
75+ }
76+
77+ pub fn reload ( & self , conn : & mut DbConnection ) -> Result < Self , HttpError > {
78+ Self :: load ( conn, self . user . clone ( ) )
79+ }
80+
81+ fn load ( conn : & mut DbConnection , query_user : QueryUser ) -> Result < Self , HttpError > {
7482 query_user. check_is_locked ( ) ?;
7583
76- let ( org_ids, org_roles) = Self :: organization_roles ( conn, query_user. id , email ) ?;
77- let ( proj_ids, proj_roles) = Self :: project_roles ( conn, query_user. id , email ) ?;
84+ let ( org_ids, org_roles) = Self :: organization_roles ( conn, & query_user) ?;
85+ let ( proj_ids, proj_roles) = Self :: project_roles ( conn, & query_user) ?;
7886
7987 let rbac = RbacUser {
8088 admin : query_user. admin ,
@@ -93,11 +101,10 @@ impl AuthUser {
93101
94102 fn organization_roles (
95103 conn : & mut DbConnection ,
96- user_id : UserId ,
97- email : & Email ,
104+ query_user : & QueryUser ,
98105 ) -> Result < ( Vec < OrganizationId > , OrganizationRoles ) , HttpError > {
99106 let roles = schema:: organization_role:: table
100- . filter ( schema:: organization_role:: user_id. eq ( user_id ) )
107+ . filter ( schema:: organization_role:: user_id. eq ( query_user . id ) )
101108 . order ( schema:: organization_role:: organization_id)
102109 . select ( (
103110 schema:: organization_role:: organization_id,
@@ -107,7 +114,10 @@ impl AuthUser {
107114 . map_err ( |e| {
108115 crate :: error:: issue_error (
109116 "User can't query organization roles" ,
110- & format ! ( "My user ({email}) on Bencher failed to query organization roles." ) ,
117+ & format ! (
118+ "My user ({email}) on Bencher failed to query organization roles." ,
119+ email = query_user. email
120+ ) ,
111121 e,
112122 )
113123 } ) ?;
@@ -120,7 +130,7 @@ impl AuthUser {
120130 Err ( e) => {
121131 let _err = crate :: error:: issue_error (
122132 "Failed to parse organization role" ,
123- & format ! ( "My user ({email}) on Bencher has an invalid organization role ({role})." ) ,
133+ & format ! ( "My user ({email}) on Bencher has an invalid organization role ({role})." , email = query_user . email ) ,
124134 e,
125135 ) ;
126136 None
@@ -133,11 +143,10 @@ impl AuthUser {
133143
134144 fn project_roles (
135145 conn : & mut DbConnection ,
136- user_id : UserId ,
137- email : & Email ,
146+ query_user : & QueryUser ,
138147 ) -> Result < ( Vec < OrgProjectId > , ProjectRoles ) , HttpError > {
139148 let roles = schema:: project_role:: table
140- . filter ( schema:: project_role:: user_id. eq ( user_id ) )
149+ . filter ( schema:: project_role:: user_id. eq ( query_user . id ) )
141150 . inner_join ( schema:: project:: table)
142151 . order ( schema:: project_role:: project_id)
143152 . select ( (
@@ -149,7 +158,10 @@ impl AuthUser {
149158 . map_err ( |e| {
150159 crate :: error:: issue_error (
151160 "User can't query project roles" ,
152- & format ! ( "My user ({email}) on Bencher failed to query project roles." ) ,
161+ & format ! (
162+ "My user ({email}) on Bencher failed to query project roles." ,
163+ email = query_user. email
164+ ) ,
153165 e,
154166 )
155167 } ) ?;
@@ -169,7 +181,8 @@ impl AuthUser {
169181 let _err = crate :: error:: issue_error (
170182 "Failed to parse project role" ,
171183 & format ! (
172- "My user ({email}) on Bencher has an invalid project role ({role})."
184+ "My user ({email}) on Bencher has an invalid project role ({role})." ,
185+ email = query_user. email
173186 ) ,
174187 e,
175188 ) ;
0 commit comments