@@ -75,7 +75,10 @@ pub trait SessionPrivilegeManager {
7575
7676 async fn validate_available_role ( & self , role_name : & str ) -> Result < RoleInfo > ;
7777
78- async fn get_visibility_checker ( & self ) -> Result < GrantObjectVisibilityChecker > ;
78+ async fn get_visibility_checker (
79+ & self ,
80+ ignore_ownership : bool ,
81+ ) -> Result < GrantObjectVisibilityChecker > ;
7982
8083 // fn show_grants(&self);
8184}
@@ -336,27 +339,31 @@ impl<'a> SessionPrivilegeManager for SessionPrivilegeManagerImpl<'a> {
336339 }
337340
338341 #[ async_backtrace:: framed]
339- async fn get_visibility_checker ( & self ) -> Result < GrantObjectVisibilityChecker > {
342+ async fn get_visibility_checker (
343+ & self ,
344+ ignore_ownership : bool ,
345+ ) -> Result < GrantObjectVisibilityChecker > {
340346 // TODO(liyz): is it check the visibility according onwerships?
341- let user_api = UserApiProvider :: instance ( ) ;
342- let ownerships = user_api
343- . role_api ( & self . session_ctx . get_current_tenant ( ) )
344- . get_ownerships ( )
345- . await ?;
346347 let roles = self . get_all_effective_roles ( ) . await ?;
347348 let roles_name: Vec < String > = roles. iter ( ) . map ( |role| role. name . to_string ( ) ) . collect ( ) ;
348349
349- let ownership_objects = if roles_name. contains ( & "account_admin" . to_string ( ) ) {
350- vec ! [ ]
351- } else {
352- let mut ownership_objects = vec ! [ ] ;
353- for ownership in ownerships {
354- if roles_name. contains ( & ownership. data . role ) {
355- ownership_objects. push ( ownership. data . object ) ;
350+ let ownership_objects =
351+ if roles_name. contains ( & "account_admin" . to_string ( ) ) || ignore_ownership {
352+ vec ! [ ]
353+ } else {
354+ let user_api = UserApiProvider :: instance ( ) ;
355+ let ownerships = user_api
356+ . role_api ( & self . session_ctx . get_current_tenant ( ) )
357+ . get_ownerships ( )
358+ . await ?;
359+ let mut ownership_objects = vec ! [ ] ;
360+ for ownership in ownerships {
361+ if roles_name. contains ( & ownership. data . role ) {
362+ ownership_objects. push ( ownership. data . object ) ;
363+ }
356364 }
357- }
358- ownership_objects
359- } ;
365+ ownership_objects
366+ } ;
360367
361368 Ok ( GrantObjectVisibilityChecker :: new (
362369 & self . get_current_user ( ) ?,
0 commit comments