Netcentric / accesscontroltool

Rights and roles management for AEM made easy
Eclipse Public License 1.0
151 stars 91 forks source link

Feature Request: Make ACE Service Configuration a Factory Configuration #259

Open jenslauterbach opened 6 years ago

jenslauterbach commented 6 years ago

Currently, the following configuration is not a factory configuration:

biz.netcentric.cq.tools.actool.aceservice.impl.AceServiceImpl

If several projects are deployed in the same AEM instance they all have to use the same configuration path (set in this configuration, see AceService.configurationPath).

It would be great if this configuration would be a factory configuration so that every project can provide its own configuration.

I have something like this in mind:

Project A: AceService.configurationPath = /apps/project-a/configuration/acl Project B: AceService.configurationPath = /apps/project-b/configuration/acl Project C: AceService.configurationPath = /apps/project-c/configuration/acl

ghenzler commented 6 years ago

The problem with that the JMX console is highly dependent on the configured path - if you run e.g. apply() exactly that one configured path will be used. The best way to deal with it is probably to provide a configuration AceService.jmxMBeanName and use more than one jmx MBeans (although this is also not perfect, some of the operations are not dependent on the configurationPath, e.g. applyConfig(configurationRootPath)

One way to make this work today is using the Install Hook: The install hook does not take the root path in account at all but only takes the yaml files from the package. You could run a setup as follows:

Then you can apply everything via JMX. To install you can use package dependencies (e.g. from Package Project 1 a dependency to Package Base).

Please note that you will have to configure https://github.com/Netcentric/accesscontroltool/blob/develop/docs/AdvancedFeatures.md#configure-memberships-oftowards-externally-managed-groups properly to ensure memberships between groups stemming from different packages are kept correctly.

mrozati commented 6 years ago

The issue with single configuration root in JMX console is pretty confusing for administrators; specially when one of applications uses the legacy configuration, which simply overwrites the newer one: https://github.com/Netcentric/accesscontroltool/blob/develop/accesscontroltool-bundle/src/main/java/biz/netcentric/cq/tools/actool/impl/AcInstallationServiceImpl.java#L131

I understand the complexity of having a configuration factory, but maybe a multiple value property could be a simpler solution. Anyway using the install hook just solves the apply issue although it's already possible to use applyConfig(configurationRootPath). But purging groups is still not possible, because you only have purgeAllAuthorizablesFromConfiguration().

I'm missing at least a purgeAllAuthorizablesFromConfiguration(configurationRootPath) method