Il 01/04/2015 00:39, Alan Evans ha scritto:
I am going to end up with maybe a dozen resources and some parts of
the schema are going to be unique to each resource. Instead of having
a bunch of different derrived attributes is there a better way of
dealing with similar but distinct attributes?
The easiest way to satisfy your requirement is to use derived
attributes, like you're doing.
That's not clear, let me provide an example.
Consider that I might have 3 instances of Active Directory. Instead
of defining 5 different "userPrincipalName" attributes
ad1userPrincipalName = username + '@ad1.example.com
<http://ad1.example.com>'
ad2userPrincipalName = username + '@ad2.example.com
<http://ad2.example.com>'
ad3userPrincipalName = username + '@ad3.example.com
<http://ad3.example.com>'
And then in the user attribute map defining userPrincipalName =
ad1userPrincipalName for the resource AD1 and so on.
For a derrived attribute is there a way to define the domain outside
of the attribute? On the reousrce perhaps?
You can't read the parameters of a resource with Jexl.
So the derrived attribute looks like:
userPrincipalName = username + '@' + resource.domainname
Below another possible solution:
if you don't like defining different n userPrincipalName for every
resource, you can work with a PropagationActionClass [1].
1) Create a new user attribute (normal/virtual).
2) Add the attribute to each resource mapping
[InternalMapping] userPrincipalName --> [ExternalMapping]
userPrincipalName --> [Scope] Propagation
3) In your PropagationAction class, ovveride the method "before"
andbuildyour userPrincipalName for the resource X.
If the domain name (ad1.example.com <http://ad1.example.com>) is an
information present on your resource/connector configuration (like host,
resource name, etc etc), you can read the parameters with
task.getResource() for resource parameters
task.getResource().getConnector() for connector parameters
4)Build your userPrincipalName
Set<Attribute> attributes = new HashSet<Attribute>(task.getAttributes())
String userPrincipalName = ...
...
Attribute userPrincipaleNameAttribute =
AttributeBuilder.build("userPrincipalName", userPrincipalName);
...
attributes.add(userPrincipalNameAttribute);
task.setAttributes(attributes)
Let me know what you think.
Regards
Marco
[1]
https://cwiki.apache.org/confluence/display/SYNCOPE/PropagationActionsClass
Regards,
-Alan
--
Dott. Marco Di Sabatino Di Diodoro
Tel. +39 3939065570
Tirasa S.r.l.
Viale D'Annunzio 267 - 65127 Pescara
Tel +39 0859116307 / FAX +39 0859111173
http://www.tirasa.net
Apache Syncope PMC Member
http://people.apache.org/~mdisabatino/