Lainaus Fabio Martelli <[email protected]>:

Il 04/12/2013 13:01, Timo-V Hatakka ha scritto:
Hi!

On 03/12/2013 13:38, Timo Hatakka wrote:

Hi!

how can you add a virtual read-only attribute to an user by GUI or using your own code? Only way to include a virtual attribute is to give some dummy initial value in the user interface and this trick cannot be used if the attribute is read only. Seems to be a problem even in 1.1.5.


There is no problem in providing values for read-only virtual attributes via client code.

Via admin console, however, this is rather impossible: could you fill an issue, please?

I will.

Also, is there some design mistake in PROPAGATION / SYNCRONIZATION selection with virtual attributes? I would suppose that SYNCRONIZATION will only read values from external resource and PROPAGATION will write values to external resource, but is it so?


No: PROPAGATION / SYNCHRONIZATION / BOTH refer to the *purpose* of mapping entry, e.g. if Syncope will be using that mapping entry only during propagation, only during synchronization or in both cases. A read-only virtual attribute (whose value comes from external resource A) can be propagated to external resource B, for example.

I had(in 1.1.4) following test, which you can iterate:

add virtual attribute HR:title to the schema
add read mapping: resource HR / USER / UserVirtualSchema / HR:title / title / false / SYNCRONIZATION add write mapping: resource LDAP / USER / UserVirtualSchema / HR:title / title / false / PROPAGATION add a virtual attribute for a user by giving a string "test" as a dummy value and save value "test" is propagated to ldap as supposed (because no other values available here)
open user, virtual attributes are now "test" and the value coming from HR

I suppose that system should show only value coming from HR not the previous value written to LDAP. I first supposed that cache is used in a wrong way in this situation but even the application server restart keeps the situation the same. And notice that I didn't run any task.
Hi Timo,
mapping purposes are just for propagation or synchronization operations: MappingPurpose.PROPAGATION doesn't mean that the attribute is "write-only" but that it is just interested by a propagation not by a synchronization.

Your configuration implies:
* HR:title will be synchronized by executing a sync task defined for HR;
* HR:title won't be synchronized by executing a sync task defined for LDAP;
* HR:title won't be propagated towards remote attribute title on HR resource;
* HR:title will be propagated towards remote attribute title on LDAP resource.

Virtual attributes will be read always (SEARCH capability on the connector is needed for).

This implies following:

Lets suppose that HR.title is "A", after HR syncronization is done, it is copied to LDAP. Then title is changed in HR to value "B". Now

a) if we resync HR, the value in LDAP will be "B"
b) if we open and save user from admin interface, it will be ["A", "B"]

I think this lead to an inconsistent state, where the result depends on the operations done. Or did I miss something?

Regards,
Timo


Best regards,
F.

--
Fabio Martelli

Tirasa - Open Source Excellence
http://www.tirasa.net/

Apache Syncope PMC
http://people.apache.org/~fmartelli/



Reply via email to