{"record":{"id":"7d5cd642723d68a3","repo":"pentaho/pentaho-kettle","slug":"repository-does-not-support-access-control-7d5cd6","errorCode":null,"errorMessage":"Repository does not support access control","messagePattern":"Repository does not support access control","errorType":"exception","errorClass":"IllegalStateException","httpStatus":null,"severity":"error","filePath":"plugins/pur/core/src/main/java/org/pentaho/di/ui/repository/pur/repositoryexplorer/controller/PermissionsController.java","lineNumber":132,"sourceCode":"              readCheckbox.setDisabled( true );\n              viewAclsModel.setHasManageAclAccess( false );\n            } else {\n              applyAclButton.setDisabled( false );\n              inheritParentPermissionCheckbox.setDisabled( false );\n              viewAclsModel.setHasManageAclAccess( true );\n            }\n\n            viewAclsModel.setRemoveEnabled( false );\n            List<UIRepositoryObjectAcl> selectedAclList = Collections.emptyList();\n            // we've moved to a new file/folder; need to clear out what the model thinks is selected\n            viewAclsModel.setSelectedAclList( selectedAclList );\n            permissionsCheckboxHandler.updateCheckboxes( EnumSet.noneOf( RepositoryFilePermission.class ) );\n            UIRepositoryObject repoObject = ro.get( 0 );\n            try {\n              if ( repoObject instanceof IAclObject ) {\n                ( (IAclObject) repoObject ).getAcls( viewAclsModel );\n              } else {\n                throw new IllegalStateException( BaseMessages.getString( PKG, \"PermissionsController.NoAclSupport\" ) ); //$NON-NLS-1$\n              }\n\n              fileFolderLabel\n                  .setValue( BaseMessages.getString( PKG, \"AclTab.UserRolePermission\", repoObject.getName() ) ); //$NON-NLS-1$\n              bf.setBindingType( Binding.Type.ONE_WAY );\n              bf.createBinding( viewAclsModel, \"acls\", userRoleList, \"elements\" ); //$NON-NLS-1$ //$NON-NLS-2$\n              updateInheritFromParentPermission();\n            } catch ( AccessDeniedException ade ) {\n              if ( mainController == null || !mainController.handleLostRepository( ade ) ) {\n                messageBox.setTitle( BaseMessages.getString( PKG, \"Dialog.Error\" ) );//$NON-NLS-1$\n                messageBox.setAcceptLabel( BaseMessages.getString( PKG, \"Dialog.Ok\" ) );//$NON-NLS-1$\n                messageBox.setMessage( BaseMessages.getString( PKG,\n                    \"PermissionsController.UnableToGetAcls\", repoObject.getName(), ade.getLocalizedMessage() ) );//$NON-NLS-1$\n\n                messageBox.open();\n              }\n            } catch ( Exception e ) {\n              if ( mainController == null || !mainController.handleLostRepository( e ) ) {","sourceCodeStart":114,"sourceCodeEnd":150,"githubUrl":"https://github.com/pentaho/pentaho-kettle/blob/f3058517a153da500bf4551f46d79b91bf8ec552/plugins/pur/core/src/main/java/org/pentaho/di/ui/repository/pur/repositoryexplorer/controller/PermissionsController.java#L114-L150","documentation":"PermissionsController.sourceToTarget loads ACLs of the selected repository object (file/folder/content) when binding the UI. If the object does not implement IAclObject — meaning the repository does not support access control on it — IllegalStateException('Repository does not support access control') is thrown.","triggerScenarios":"Selecting a repository object in the explorer whose wrapper class does not implement IAclObject, causing the permissions tab binding to fail while calling getAcls(viewAclsModel).","commonSituations":"Non-EE repository objects (no ACL support) shown in the explorer with the permissions tab enabled; object types like jobs/transfections stored where ACLs are unsupported; repository object wrappers not upgraded to IAclObject.","solutions":["Use a Pentaho EE repository whose repository objects implement IAclObject","Check repoObject instanceof IAclObject before showing/initializing the permissions tab","Catch IllegalStateException in sourceToTarget and hide/disable the ACL controls for unsupported objects"],"exampleFix":"// before\npermissionsController.sourceToTarget();\n// after\nif ( repoObject instanceof IAclObject ) {\n  permissionsController.sourceToTarget();\n} else {\n  // disable ACL tab for this object\n}","handlingStrategy":"type-guard","validationCode":"if (repoObject instanceof IAclObject) { /* safe to load ACLs */ }\n","typeGuard":"static boolean supportsAcls(Object repoObject) {\n  return repoObject instanceof IAclObject;\n}\n","tryCatchPattern":"try {\n  sourceToTarget();\n} catch (IllegalStateException e) {\n  log.warn(\"Selected object does not support ACLs; disabling permissions UI\");\n}\n","preventionTips":["Only enable the permissions tab for IAclObject repository objects","Use EE repositories for ACL operations","Handle selection changes by re-checking ACL support"],"tags":["pentaho","acl","repository","permissions"],"backgroundTag":"feature-not-enabled","analyzedSha":"f3058517a153da500bf4551f46d79b91bf8ec552","analyzedAt":"2026-09-13T14:04:16.340Z","contentChangedAt":"2026-09-13T14:04:16.340Z","schemaVersion":2},"datasetVersion":"2026-09-20T23:17:15.980Z"}