Author: fdesbois Date: 2010-06-21 09:23:28 +0000 (Mon, 21 Jun 2010) New Revision: 554 Log: Evo #2247 : Add access to administration page for coordinators. They can only manage "observer" and "coordinator" users for their own company. Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/Layout.tml trunk/wao-ui/src/main/webapp/Administration.tml Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java 2010-06-18 16:15:34 UTC (rev 553) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/components/Layout.java 2010-06-21 09:23:28 UTC (rev 554) @@ -136,7 +136,7 @@ } public String getAdminClass() { - return getCurrentUser().isAdmin() ? " admin" : ""; + return !isAdministrationHidden() ? " admin" : ""; } public String getSamplingSelected() { @@ -159,6 +159,10 @@ return this.contentId.equals("so-admin") ? "selected" : ""; } + public boolean isAdministrationHidden() { + return !getCurrentUser().isAdmin() && !getCurrentUser().isCoordinator(); + } + public String getAccessText() { String text = getCurrentUser().getRole().getLabel(); if (getCurrentUser().isReadOnly()) { Modified: trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java =================================================================== --- trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2010-06-18 16:15:34 UTC (rev 553) +++ trunk/wao-ui/src/main/java/fr/ifremer/wao/ui/pages/Administration.java 2010-06-21 09:23:28 UTC (rev 554) @@ -50,11 +50,14 @@ import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; +import java.util.ArrayList; import java.util.List; import java.util.zip.GZIPInputStream; import org.apache.commons.lang.StringUtils; import org.apache.tapestry5.EventContext; +import org.apache.tapestry5.OptionModel; +import org.apache.tapestry5.SelectModel; import org.apache.tapestry5.StreamResponse; import org.apache.tapestry5.annotations.IncludeStylesheet; import org.apache.tapestry5.annotations.InjectComponent; @@ -65,6 +68,8 @@ import org.apache.tapestry5.beaneditor.BeanModel; import org.apache.tapestry5.corelib.components.BeanEditForm; import org.apache.tapestry5.corelib.components.Zone; +import org.apache.tapestry5.internal.OptionModelImpl; +import org.apache.tapestry5.internal.SelectModelImpl; import org.apache.tapestry5.ioc.Messages; import org.apache.tapestry5.ioc.annotations.Inject; import org.apache.tapestry5.ioc.services.PropertyAccess; @@ -81,7 +86,7 @@ * * @author fdesbois <fdesbois at codelutin.com> */ - at RequiresAuthentication(value = UserRole.ADMIN, readOnlyAllowed = false) + at RequiresAuthentication(value = {UserRole.ADMIN, UserRole.COORDINATOR}, readOnlyAllowed = false) @IncludeStylesheet("context:css/administration.css") public class Administration { @@ -148,6 +153,8 @@ if (ec.getCount() > 1) { userId = ec.get(String.class, 1); } + } else if (currentUser.isCoordinator()) { + companyId = currentUser.getCompany().getId(); } } @@ -477,6 +484,8 @@ @InjectComponent private Zone userRoleZone; + private SelectModel userRoleSelectModel; + @Persist @Property private UserRole userRole; @@ -494,6 +503,25 @@ @Property private boolean refreshUserRoleZone; + public SelectModel getUserRoleSelectModel() { + if (userRoleSelectModel == null) { + List<OptionModel> options = new ArrayList<OptionModel>(); + options.add(newUserRoleOption(UserRole.OBSERVER)); + options.add(newUserRoleOption(UserRole.COORDINATOR)); + // Only admin can set ADMIN and GUEST role + if (currentUser.isAdmin()) { + options.add(newUserRoleOption(UserRole.ADMIN)); + options.add(newUserRoleOption(UserRole.GUEST)); + } + userRoleSelectModel = new SelectModelImpl(null, options); + } + return userRoleSelectModel; + } + + private OptionModel newUserRoleOption(UserRole role) { + return new OptionModelImpl(role.getLabel(), role); + } + public String getRoleReadOnly() { String text = ""; if (user.isReadOnly(role)) { @@ -502,10 +530,6 @@ return text; } -// void onSelectedFromUser() { -// refreshUserRoleZone = false; -// } - @Log void onChangeFromUserRole(String value) { if (StringUtils.isNotEmpty(value)) { Modified: trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/Layout.tml =================================================================== --- trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/Layout.tml 2010-06-18 16:15:34 UTC (rev 553) +++ trunk/wao-ui/src/main/resources/fr/ifremer/wao/ui/components/Layout.tml 2010-06-21 09:23:28 UTC (rev 554) @@ -113,7 +113,7 @@ </li> </p:else> </t:unless> - <t:if t:test="currentUser.admin"> + <t:unless t:test="administrationHidden"> <li class="sep"> </li> <t:if t:test="currentUser.readOnly"> <li class="disabled${adminClass}" title="Administration inaccessible"> @@ -125,7 +125,7 @@ </li> </p:else> </t:if> - </t:if> + </t:unless> </ul> <div id="${contentId}"> Modified: trunk/wao-ui/src/main/webapp/Administration.tml =================================================================== --- trunk/wao-ui/src/main/webapp/Administration.tml 2010-06-18 16:15:34 UTC (rev 553) +++ trunk/wao-ui/src/main/webapp/Administration.tml 2010-06-21 09:23:28 UTC (rev 554) @@ -54,24 +54,38 @@ </t:unless> </t:if> - <form class="actions clearfix" t:type="form" t:id="actionsForm"> - <div class="fields fleft"> - <t:label t:for="companies" /> : - <input t:type="select" t:id="companies" t:model="companiesSelectModel" t:value="companyId" /> - </div> - <div class="icons fleft"> - <input t:type="submit" t:id="showUsers" class="ico search" value="Show Details" t:title="Afficher détails" /> - <input t:type="submit" t:id="addNewCompany" class="ico add" value="Add new company" t:title="Ajouter une nouvelle société" /> - </div> - </form> + <t:if t:test="currentUser.admin"> + <form class="actions clearfix" t:type="form" t:id="actionsForm"> + <div class="fields fleft"> + <t:label t:for="companies" /> : + <input t:type="select" t:id="companies" t:model="companiesSelectModel" t:value="companyId" /> + </div> + <div class="icons fleft"> + <input t:type="submit" t:id="showUsers" class="ico search" value="Show Details" t:title="Afficher détails" /> + <input t:type="submit" t:id="addNewCompany" class="ico add" value="Add new company" t:title="Ajouter une nouvelle société" /> + </div> + </form> + </t:if> <fieldset class="user-form clearfix"> <form t:type="beaneditform" class="clearfix" t:id="company" t:include="name, address1, address2, postalCode, city, phoneNumber, email, active"> <p:name> - <t:label t:for="name" /> - <input t:type="textfield" t:id="name" t:validate="required" value="company.name" /> + <t:if t:test="currentUser.admin"> + <t:label t:for="name" /> + <input t:type="textfield" t:id="name" t:validate="required" value="company.name" /> + <p:else> + <label>Nom</label> + <strong>${company.name}</strong> + </p:else> + </t:if> </p:name> + <p:active> + <t:if t:test="currentUser.admin"> + <t:label t:for="active" /> + <input t:type="checkbox" t:id="active" value="company.active" /> + </t:if> + </p:active> </form> </fieldset> @@ -117,13 +131,13 @@ <label t:type="label" for="generatePassword" /> <input t:type="checkbox" t:id="generatePassword" value="generatePassword" /> <span> ou définir manuellement : </span> - <input t:type="passwordfield" t:id="password2" value="password" /> + <input t:type="passwordfield" t:id="password2" class="width100" value="password" /> </p:password> <p:userRole> <t:zone id="so-admin-userRoleZone" t:id="userRoleZone" t:update="show"> <t:nuiton.subForm t:visible="refreshUserRoleZone"> <label t:type="label" for="userRole" /> - <select t:type="select" t:id="userRole" t:value="userRole" + <select t:type="select" t:id="userRole" t:value="userRole" t:model="userRoleSelectModel" t:mixins="ck/onEvent" t:event="change"/> <span>Lecture seule : </span>