@@ -293,18 +293,18 @@ public Set<SchemaTableName> filterTables(SystemSecurityContext context, String c
293293 /** SYSTEM **/
294294
295295 @ Override
296- public void checkCanSetSystemSessionProperty (SystemSecurityContext context , String propertyName ) {
297- if (!hasPermission (createSystemPropertyResource (propertyName ), context , TrinoAccessType .ALTER )) {
296+ public void checkCanSetSystemSessionProperty (Identity identity , String propertyName ) {
297+ if (!hasPermission (createSystemPropertyResource (propertyName ), identity , TrinoAccessType .ALTER )) {
298298 LOG .debug ("RangerSystemAccessControl.checkCanSetSystemSessionProperty denied" );
299299 AccessDeniedException .denySetSystemSessionProperty (propertyName );
300300 }
301301 }
302302
303303 @ Override
304- public void checkCanImpersonateUser (SystemSecurityContext context , String userName ) {
305- if (!hasPermission (createUserResource (userName ), context , TrinoAccessType .IMPERSONATE )) {
304+ public void checkCanImpersonateUser (Identity identity , String userName ) {
305+ if (!hasPermission (createUserResource (userName ), identity , TrinoAccessType .IMPERSONATE )) {
306306 LOG .debug ("RangerSystemAccessControl.checkCanImpersonateUser(" + userName + ") denied" );
307- AccessDeniedException .denyImpersonateUser (context . getIdentity () .getUser (), userName );
307+ AccessDeniedException .denyImpersonateUser (identity .getUser (), userName );
308308 }
309309 }
310310
@@ -660,49 +660,49 @@ public Set<String> filterColumns(SystemSecurityContext context, CatalogSchemaTab
660660
661661 /**
662662 * This is a NOOP. Everyone can execute a query
663- * @param context
663+ * @param identity
664664 */
665665 @ Override
666- public void checkCanExecuteQuery (SystemSecurityContext context ) {
666+ public void checkCanExecuteQuery (Identity identity ) {
667667 }
668668
669669 @ Override
670- public void checkCanViewQueryOwnedBy (SystemSecurityContext context , Identity queryOwner ) {
671- if (!hasPermission (createUserResource (queryOwner .getUser ()), context , TrinoAccessType .IMPERSONATE )) {
670+ public void checkCanViewQueryOwnedBy (Identity identity , Identity queryOwner ) {
671+ if (!hasPermission (createUserResource (queryOwner .getUser ()), identity , TrinoAccessType .IMPERSONATE )) {
672672 LOG .debug ("RangerSystemAccessControl.checkCanViewQueryOwnedBy(" + queryOwner + ") denied" );
673- AccessDeniedException .denyImpersonateUser (context . getIdentity () .getUser (), queryOwner .getUser ());
673+ AccessDeniedException .denyImpersonateUser (identity .getUser (), queryOwner .getUser ());
674674 }
675675 }
676676
677677 /**
678678 * This is a NOOP, no filtering is applied
679679 */
680680 @ Override
681- public Collection <Identity > filterViewQueryOwnedBy (SystemSecurityContext context , Collection <Identity > queryOwners ) {
681+ public Collection <Identity > filterViewQueryOwnedBy (Identity identity , Collection <Identity > queryOwners ) {
682682 return queryOwners ;
683683 }
684684
685685 @ Override
686- public void checkCanKillQueryOwnedBy (SystemSecurityContext context , Identity queryOwner ) {
687- if (!hasPermission (createUserResource (queryOwner .getUser ()), context , TrinoAccessType .IMPERSONATE )) {
686+ public void checkCanKillQueryOwnedBy (Identity identity , Identity queryOwner ) {
687+ if (!hasPermission (createUserResource (queryOwner .getUser ()), identity , TrinoAccessType .IMPERSONATE )) {
688688 LOG .debug ("RangerSystemAccessControl.checkCanKillQueryOwnedBy(" + queryOwner + ") denied" );
689- AccessDeniedException .denyImpersonateUser (context . getIdentity () .getUser (), queryOwner .getUser ());
689+ AccessDeniedException .denyImpersonateUser (identity .getUser (), queryOwner .getUser ());
690690 }
691691 }
692692
693693 @ Override
694- public void checkCanReadSystemInformation (SystemSecurityContext context ) {
695- if (!hasPermission (createUserResource (context . getIdentity (). getUser ()), context , TrinoAccessType .IMPERSONATE )) {
696- LOG .debug ("RangerSystemAccessControl.checkCanReadSystemInformation(" + context . getIdentity () .getUser () + ") denied" );
697- AccessDeniedException .denyImpersonateUser (context . getIdentity () .getUser (), "trino" );
694+ public void checkCanReadSystemInformation (Identity identity ) {
695+ if (!hasPermission (createUserResource (identity . getUser ()), identity , TrinoAccessType .IMPERSONATE )) {
696+ LOG .debug ("RangerSystemAccessControl.checkCanReadSystemInformation(" + identity .getUser () + ") denied" );
697+ AccessDeniedException .denyImpersonateUser (identity .getUser (), "trino" );
698698 }
699699 }
700700
701701 @ Override
702- public void checkCanWriteSystemInformation (SystemSecurityContext context ) {
703- if (!hasPermission (createUserResource (context . getIdentity (). getUser ()), context , TrinoAccessType .IMPERSONATE )) {
704- LOG .debug ("RangerSystemAccessControl.checkCanWriteSystemInformation(" + context . getIdentity () .getUser () + ") denied" );
705- AccessDeniedException .denyImpersonateUser (context . getIdentity () .getUser (), "trino" );
702+ public void checkCanWriteSystemInformation (Identity identity ) {
703+ if (!hasPermission (createUserResource (identity . getUser ()), identity , TrinoAccessType .IMPERSONATE )) {
704+ LOG .debug ("RangerSystemAccessControl.checkCanWriteSystemInformation(" + identity .getUser () + ") denied" );
705+ AccessDeniedException .denyImpersonateUser (identity .getUser (), "trino" );
706706 }
707707 }
708708
@@ -766,25 +766,29 @@ public void checkCanExecuteTableProcedure(
766766 /** HELPER FUNCTIONS **/
767767
768768 private RangerTrinoAccessRequest createAccessRequest (RangerTrinoResource resource , SystemSecurityContext context , TrinoAccessType accessType ) {
769+ return createAccessRequest (resource , context .getIdentity (), accessType );
770+ }
771+
772+ private RangerTrinoAccessRequest createAccessRequest (RangerTrinoResource resource , Identity identity , TrinoAccessType accessType ) {
769773 Set <String > userGroups = null ;
770774
771775 if (useUgi ) {
772- UserGroupInformation ugi = UserGroupInformation .createRemoteUser (context . getIdentity () .getUser ());
776+ UserGroupInformation ugi = UserGroupInformation .createRemoteUser (identity .getUser ());
773777
774778 String [] groups = ugi != null ? ugi .getGroupNames () : null ;
775779
776780 if (groups != null && groups .length > 0 ) {
777781 userGroups = new HashSet <>(Arrays .asList (groups ));
778782 }
779783 } else {
780- userGroups = context . getIdentity () .getGroups ();
784+ userGroups = identity .getGroups ();
781785 }
782786
783787 RangerTrinoAccessRequest request = new RangerTrinoAccessRequest (
784- resource ,
785- context . getIdentity () .getUser (),
786- userGroups ,
787- accessType
788+ resource ,
789+ identity .getUser (),
790+ userGroups ,
791+ accessType
788792 );
789793
790794 return request ;
@@ -803,6 +807,19 @@ private boolean hasPermission(RangerTrinoResource resource, SystemSecurityContex
803807 return ret ;
804808 }
805809
810+ private boolean hasPermission (RangerTrinoResource resource , Identity identity , TrinoAccessType accessType ) {
811+ boolean ret = false ;
812+
813+ RangerTrinoAccessRequest request = createAccessRequest (resource , identity , accessType );
814+
815+ RangerAccessResult result = rangerPlugin .isAccessAllowed (request );
816+ if (result != null && result .getIsAllowed ()) {
817+ ret = true ;
818+ }
819+
820+ return ret ;
821+ }
822+
806823 private static RangerTrinoResource createUserResource (String userName ) {
807824 RangerTrinoResource res = new RangerTrinoResource ();
808825 res .setValue (RangerTrinoResource .KEY_USER , userName );
0 commit comments