Leere Attribute aus dem User Consent ausblenden

Archiv

Dieser Artikel ist ein Community-Beitrag für Shibboleth IdP 3.x. Es ist unklar, ob er für Shibboleth IdP 4.x so noch gilt.

Werden die Nutzerattribute im Attribute-Resolver über einen DataConnector vom Typ RelationalDatabase bezogen, so werden sowohl leere Strings („“) als auch NULL-Values über den Attributtyp EmptyAttributeValue kodiert.
(Es könnte bitte noch jemand bestätigen oder dementieren, ob dieses Verhalten auch für LDAP-Konnektoren zutrifft)
Dies führt auf der Consent-Seite dazu, dass diese Attribute mit dem Wert „NULL_VALUE“ angezeigt werden. Beispiele hierfür sind die Attribute dfnEduPersonTermsOfStudy, dfnEduPersonFieldOfStudyString oder ähnliche studienbezogene Attribute, die bei Mitarbeitern in der Regel leer oder NULL sind.
Um diese Attribute beim Consent auszublenden, kann eine Änderung an der Datei attribute-release.vm vorgenommen werden.

views/intercept/attribute-release.vm
...
<div id="attributeRelease">
 <table>
  <thead>
   <tr>
    <th colspan="3">
     #springMessageText("idp.attribute-release.attributesHeader", "Information to be Provided to Service")
    </th>
   </tr>
  </thead>
  <tbody>
   #foreach ($attribute in $attributeReleaseContext.getConsentableAttributes().values())
    #set( $empty = false)
    #foreach($value in $attribute.values)
     #if ($value.class.name == "net.shibboleth.idp.attribute.EmptyAttributeValue")
      #set ($empty = true)
      #break
     #end
    #end
    #if(!$empty)
     <tr>
      <td>$encoder.encodeForHTML($attributeDisplayNameFunction.apply($attribute))</td>
      <td>
      #foreach ($value in $attribute.values)
       <strong>$encoder.encodeForHTML($value.getDisplayValue())</strong>
       <br>
      #end
      </td>
      <td style="vertical-align: top">
       #if ($attributeReleaseFlowDescriptor.perAttributeConsentEnabled)
        #set ($inputType = "checkbox")
       #else
        #set ($inputType = "hidden")
       #end
       <input id="$attribute.id" type="$inputType" name="_shib_idp_consentIds" value="$encoder.encodeForHTML($attribute.id)" checked>
      </td>
     </tr>
    #end
   #end
  </tbody>
 </table>
</div>
 
...

Hierbei wird in der foreach-Schleife geprüft, ob das anzuzeigende Attribut vom Typ EmptyAttributeValue ist (#if ($value.class.name == „net.shibboleth.idp.attribute.EmptyAttributeValue“)). Der Schalter „empty“ wird gesetzt und die Tabellenzeile mit dem Attributnamen und dem Attributwert wird anschließend nicht ins HTML geschrieben.