Vinny Khosla asked on the JASIG-PORTAL list:
How do i setup a user layout template?
Subsequently, how do I go about creating subsequent user accounts who would inherit the layout template?
Could you please tell me what tables, columns and xml files are involved
here?
Do the new users automatically inherit the layout template?
or Is there a way to force a new user to inherit a certain custom layout
template ?
Answer (credit due to Susan Bramhall for initially posting reponse on JASIG-PORTAL):
The easiest way to create a template is to use ant md5passwd to create the account then login and use the GUI to set up the layout you want.
To map a user to use the template use the PersonDirs.xml to map the some appropriate attribute to uPortalTemplateUserName. The login process for the user will select the layout that matches the value of the uPortalTemplateUserName person attribute.
For example:
<uidquery>select first_name||' '||Last_name first_last, decode(role,'UNDERGRADUATE','student', 'GRAD_STUDENT','student', 'MP', 'staff', 'CT', 'staff', 'CAS', 'staff', 'SM', 'staff', 'FAC_LADDER','faculty', 'FAC_NON-LADDER','faculty', 'VF','faculty', 'FEL','faculty', 'PDA','faculty', 'PDF','faculty', 'proto-user') template, from portal_person_directory where netid=?</uidquery> with attribute template mapped like this: <attribute> <name>template</name> <alias>uPortalTemplateUserName</alias> </attribute>
This would cause the value of "role" from the sql query to govern the choice of template. This is a snippet from our actual configuration.
Behind the scenes
The IUserIdentityStore interface is the mechanism for retrieving the unique identifier for the current user in the portal. There is one implementation of this interfact: RDBMUserIdentityStore
. Two properties as well as the value of person attributes for the user affect how this class makes the choice of template.
- The property
autoCreateUsers
turns template behavior on or off. As distributed the property is set:When set to true,org.jasig.portal.services.Authentication.autoCreateUsers=true
RDBMUserIdentityStore
will automatically create all necessary data for a new portal user based on a template user. If set to false users data will not be automatically created. So far there is no other mechanism for creating user data so this property is always set to true.
- The template user value is determined either by the property
defaultTemplateUserName
or by mapping a directory attribute to uPortalTemplateUserName. When a user logs in for the first time,RDBMUserIdentityStore
first looks for a person attribute nameduPortalTemplateUserName
. The value of that attribute is expected to be the username of an existing user. The existing user is then the template for the new user. If no attribute is of that name is mapped the template user name comes from the propertyorg.jasig.portal.services.Authentication.defaultTemplateUserName
. In the distribution this is set to the userdemo
:This means that if you make no changes and map no attribute to uPortalTemplateUserName then all new users will be cloned from the userorg.jasig.portal.services.Authentication.defaultTemplateUserName=demo
demo
.
Templates and layout managers
Simple layout manager (SLM) derives power and flexability from using templates to deliver different content to users based on the values in the person object. However, once a user changes their layout a copy is stored and the template is no longer used. So any changes to the template after the user has personalized their layout do not appear unless the user rests to the default. Since both aggregated layout manager (ALM) and distributed layout manager (DLM) have better mechanisms for pushing content to users, templates can be minimized or eliminated entirely when simple layout manager is not used.