I just did an svn up and build and noticed the new 'Apache Sling Service User 
Mapper Service Amendment’

I threw together a quick config and tried it out and it works great! Thanks! 
This feels so much better than the old loginAdministrative method.


Robert A. Decker
[email protected]
http://robdecker.com/about



<node>
    
<name>org.apache.sling.serviceusermapping.impl.ServiceUserMapperImpl.amended-astra_foundation</name>

    <primaryNodeType>sling:OsgiConfig</primaryNodeType>

    <property>
        <name>service.ranking</name>
        <value>0</value>
        <type>Long</type>
    </property>
    <property>
        <name>user.mapping</name>
        <values>
            
<value>astra-utility:com.astracorp.foundation.utility.services.impl.DatastoreGCServiceImpl=admin</value>
        </values>
        <type>String</type>
    </property>

</node>


On 20 May 2014, at 16:54, Robert A. Decker <[email protected]> wrote:

> For question #1, I figured it out. However, I notice that ServiceUserMapper 
> defaults to the bundle mapping if the mapping for the more specific 
> subservice doesn’t exist in the mappings. It may be expected behavior but I 
> don’t see anything in JavaDoc (ServiceUserMapper or in 
> ResourceResolverFactory).
> 
> In my code, I’m asking for a more specific service based on subservice which 
> isn’t defined in the mappings and instead I get back the mapping for the more 
> general bundle mapping which is defined in the mappings.
> 
> 
> If I use the optional authentication info like:
>            Map<String, Object> props = new HashMap<String,Object>();
>            props.put(ResourceResolverFactory.SUBSERVICE, 
> this.getClass().getName());
>            resolver = 
> resourceResolverFactory.getServiceResourceResolver(props);
> 
> If I have a mapping in Service User Mapper Service:
> astra-utility:com.astracorp.foundation.utility.services.impl.DatastoreGCServiceImpl=admin
> 
> It works as expected.
> 
> 
> If I have the mapping:
> astra-utility:test=admin
> 
> It fails as expected with InvalidAuthorizableName.
> 
> 
> If I have the mapping:
> astra-utility=admin
> 
> It works. Is this expected? I can see arguments for returning the general 
> mapping just as strong as arguments for returning null.
> 
> 
> Robert A. Decker
> [email protected]
> http://robdecker.com/about
> 
> 
> On 15 May 2014, at 17:54, Robert A. Decker <[email protected]> wrote:
> 
>> Hello,
>> 
>> I’m successfully using ServiceUserMapper but I’m not sure if I’m using it 
>> quite right.
>> 
>> I have a bundle, "astra-utility" and in it a service “DatastoreGCService".
>> 
>> In my configurations, in "Apache Sling Service User Mapper Service", I have 
>> a user.mapping of "astra-utility=admin”
>> 
>> In my code I have:
>> ResourceResolver rr = 
>> resourceResolverFactory.getServiceResourceResolver(null);
>> 
>> This all works - I’m able to get the ResourceResolver. However, here are my 
>> questions:
>> 
>> 
>> 1) How do I define a subservice-name for my service? I would like the 
>> user.mapping to be “astra-utility:DatastoreGCService=admin”.
>> 
>> 2) Is it possible to add user.mappings to the user mapper service with 
>> sling-initial-content from multiple bundles without each bundle interfering 
>> with the other bundles' mappings? If two bundles define that configuration 
>> will the default be the last bundle installed?
>> 
>> I don’t think that I can do it programmatically - ServiceUserMapper only 
>> exposes one method, getServiceUserID.
>> 
>> If #2 isn’t possible, then should I create a service in a foundation bundle 
>> that all of my projects use that provides a resourceResolver based on a 
>> passed in user name? This would mean though that I’m using the 
>> ServiceUserMapper in a way that I don’t think it was intended for - more 
>> user-centric than service-centric.
>> 
>> Robert A. Decker
>> [email protected]
>> http://robdecker.com/about
>> 
>> 
>> 
> 
> 

Reply via email to