Hi @s1101v
Here are few important points while handling users, groups and permissions in AEM:
1. System user is created in case there is a requirement to read/write/update anything in repository using your code within bundle to handle some use cases.
2. User mapping OSGI configuration is required to use that system user permission in your code.
3. If permissions are required only to access repo or some part of repo directly by user after user logins then you create a non system user.
4. Now, if a same set of permissions are shared by more than one user, then it is best to create a group and grant required permissions to group and add users as its members.
Sample code to create get system user in AEM can be through resourceResolverFactory and you can refer ACS commons code for creation of folder:
https://github.com/Adobe-Consulting-Services/acs-aem-commons/blob/master/bundle/src/main/java/com/adobe/acs/commons/mcp/impl/processes/AssetFolderCreator.java
public static ResourceResolver getResourceResolver(final ResourceResolverFactory resourceResolverFactory,
final String subService) {
ResourceResolver resourceResolver = null;
if (null != resourceResolverFactory && null != subService) {
try {
final Map<String, Object> authInfo = new HashMap<>();
authInfo.put(ResourceResolverFactory.SUBSERVICE, subService);
resourceResolver = resourceResolverFactory.getServiceResourceResolver(authInfo);
} catch (final LoginException loginException) {
LOGGER.error(
"getResourceResolver() : Exception while getting resource resolver for subservice {} : {}",
subService, loginException);
}
}
return resourceResolver;
}