mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
ALF-2404 Correct the site membership role listing for user with all-numeric usernames
git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@30903 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -1,74 +0,0 @@
|
|||||||
/**
|
|
||||||
* Implementation of list memberships
|
|
||||||
*/
|
|
||||||
|
|
||||||
function main()
|
|
||||||
{
|
|
||||||
// Get the site id
|
|
||||||
var shortName = url.extension.split("/")[0];
|
|
||||||
var site = siteService.getSite(shortName);
|
|
||||||
|
|
||||||
// get the filters
|
|
||||||
var nameFilter = args["nf"];
|
|
||||||
var roleFilter = args["rf"];
|
|
||||||
var authorityType = args["authorityType"];
|
|
||||||
var sizeString = args["size"];
|
|
||||||
var collapseGroups = false;
|
|
||||||
|
|
||||||
if (authorityType != null)
|
|
||||||
{
|
|
||||||
if (authorityType.match("USER|GROUP") == null)
|
|
||||||
{
|
|
||||||
status.setCode(status.STATUS_BAD_REQUEST, "The 'authorityType' argument must be either USER or GROUP.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (authorityType == "USER")
|
|
||||||
{
|
|
||||||
collapseGroups = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var sizeSearch = 0;
|
|
||||||
if(sizeString != null)
|
|
||||||
{
|
|
||||||
sizeSearch = parseInt(sizeString);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Get the filtered memberships
|
|
||||||
// Comes back as a Map<String, String> containing the full authority name and role
|
|
||||||
var memberships = site.listMembers(nameFilter, roleFilter, sizeSearch, collapseGroups);
|
|
||||||
|
|
||||||
// Get a list of all the users resolved to person nodes
|
|
||||||
var authorities = Array(memberships.length);
|
|
||||||
var roles = {};
|
|
||||||
|
|
||||||
for (userName in memberships)
|
|
||||||
{
|
|
||||||
var membershipRole = memberships[userName];
|
|
||||||
if (userName.match("^GROUP_"))
|
|
||||||
{
|
|
||||||
if (authorityType == null || authorityType == "GROUP")
|
|
||||||
{
|
|
||||||
// make sure the keys are strings - as usernames may be all numbers!
|
|
||||||
authorities['_' + userName] = groups.getGroupForFullAuthorityName(userName);
|
|
||||||
roles['_' + userName] = membershipRole;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (authorityType == null || authorityType == "USER")
|
|
||||||
{
|
|
||||||
// make sure the keys are strings - as usernames may be all numbers!
|
|
||||||
authorities['_' + userName] = people.getPerson(userName);
|
|
||||||
roles['_' + userName] = membershipRole;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pass the information to the template
|
|
||||||
model.site = site;
|
|
||||||
model.roles = roles;
|
|
||||||
model.authorities = authorities;
|
|
||||||
}
|
|
||||||
|
|
||||||
main();
|
|
@@ -712,15 +712,30 @@
|
|||||||
<!-- Site Service REST API -->
|
<!-- Site Service REST API -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
|
||||||
|
<!-- abstract site web script -->
|
||||||
|
<bean id="abstractSiteWebScript"
|
||||||
|
class="org.alfresco.repo.web.scripts.site.AbstractSiteWebscript"
|
||||||
|
parent="webscript" abstract="true">
|
||||||
|
<property name="siteService" ref="SiteService"/>
|
||||||
|
<property name="authorityService" ref="AuthorityService"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
|
<!-- Lists the membership of a site -->
|
||||||
|
<bean id="webscript.org.alfresco.repository.site.membership.memberships.get" class="org.alfresco.repo.web.scripts.site.SiteMembershipsGet" parent="abstractSiteWebScript">
|
||||||
|
<property name="personService" ref="PersonService"/>
|
||||||
|
<property name="scriptAuthorityService" ref="authorityServiceScript"/>
|
||||||
|
</bean>
|
||||||
|
|
||||||
<!-- Exports a site's contents as ACP+AVM dumps -->
|
<!-- Exports a site's contents as ACP+AVM dumps -->
|
||||||
<bean id="webscript.org.alfresco.repository.site.site-export.get" class="org.alfresco.repo.web.scripts.site.SiteExportGet" parent="webscript">
|
<bean id="webscript.org.alfresco.repository.site.site-export.get" class="org.alfresco.repo.web.scripts.site.SiteExportGet" parent="webscript">
|
||||||
<property name="authorityService" ref="AuthorityService"/>
|
<property name="siteService" ref="SiteService"/>
|
||||||
<property name="mimetypeService" ref="MimetypeService"/>
|
<property name="mimetypeService" ref="MimetypeService"/>
|
||||||
<property name="exporterService" ref="ExporterService"/>
|
<property name="exporterService" ref="ExporterService"/>
|
||||||
<property name="siteService" ref="SiteService"/>
|
<property name="authorityService" ref="AuthorityService"/>
|
||||||
<property name="authenticationContextManager" ref="Authentication"/>
|
<property name="authenticationContextManager" ref="Authentication"/>
|
||||||
</bean>
|
</bean>
|
||||||
|
|
||||||
|
|
||||||
<!-- -->
|
<!-- -->
|
||||||
<!-- Person Service REST API -->
|
<!-- Person Service REST API -->
|
||||||
<!-- -->
|
<!-- -->
|
||||||
|
@@ -0,0 +1,77 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2011 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This file is part of Alfresco
|
||||||
|
*
|
||||||
|
* Alfresco is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.alfresco.repo.web.scripts.site;
|
||||||
|
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.alfresco.service.cmr.security.AuthorityService;
|
||||||
|
import org.alfresco.service.cmr.site.SiteInfo;
|
||||||
|
import org.alfresco.service.cmr.site.SiteService;
|
||||||
|
import org.springframework.extensions.webscripts.Cache;
|
||||||
|
import org.springframework.extensions.webscripts.DeclarativeWebScript;
|
||||||
|
import org.springframework.extensions.webscripts.Status;
|
||||||
|
import org.springframework.extensions.webscripts.WebScriptException;
|
||||||
|
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author Nick Burch
|
||||||
|
* @since 4.0
|
||||||
|
*/
|
||||||
|
public abstract class AbstractSiteWebScript extends DeclarativeWebScript
|
||||||
|
{
|
||||||
|
protected SiteService siteService;
|
||||||
|
protected AuthorityService authorityService;
|
||||||
|
|
||||||
|
public void setSiteService(SiteService siteService)
|
||||||
|
{
|
||||||
|
this.siteService = siteService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthorityService(AuthorityService authorityService)
|
||||||
|
{
|
||||||
|
this.authorityService = authorityService;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected static String buildSiteGroup(SiteInfo site)
|
||||||
|
{
|
||||||
|
return "GROUP_site_" + site.getShortName();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Map<String, Object> executeImpl(WebScriptRequest req,
|
||||||
|
Status status, Cache cache)
|
||||||
|
{
|
||||||
|
// Grab the site
|
||||||
|
String siteName =
|
||||||
|
req.getServiceMatch().getTemplateVars().get("shortname");
|
||||||
|
SiteInfo site = siteService.getSite(siteName);
|
||||||
|
if (site == null)
|
||||||
|
{
|
||||||
|
throw new WebScriptException(
|
||||||
|
Status.STATUS_NOT_FOUND,
|
||||||
|
"No Site found with that short name");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Process
|
||||||
|
return executeImpl(site, req, status, cache);
|
||||||
|
}
|
||||||
|
protected abstract Map<String, Object> executeImpl(SiteInfo site,
|
||||||
|
WebScriptRequest req, Status status, Cache cache);
|
||||||
|
}
|
@@ -167,7 +167,7 @@ public class SiteExportGet extends AbstractWebScript
|
|||||||
protected void doPeopleACPExport(SiteInfo site, CloseIgnoringOutputStream writeTo) throws IOException
|
protected void doPeopleACPExport(SiteInfo site, CloseIgnoringOutputStream writeTo) throws IOException
|
||||||
{
|
{
|
||||||
// Find the root group
|
// Find the root group
|
||||||
String siteGroup = buildSiteGroup(site);
|
String siteGroup = AbstractSiteWebScript.buildSiteGroup(site);
|
||||||
|
|
||||||
// Now get all people in the child groups
|
// Now get all people in the child groups
|
||||||
Set<String> siteUsers = authorityService.getContainedAuthorities(
|
Set<String> siteUsers = authorityService.getContainedAuthorities(
|
||||||
@@ -205,7 +205,7 @@ public class SiteExportGet extends AbstractWebScript
|
|||||||
protected void doGroupExport(SiteInfo site, CloseIgnoringOutputStream writeTo) throws IOException
|
protected void doGroupExport(SiteInfo site, CloseIgnoringOutputStream writeTo) throws IOException
|
||||||
{
|
{
|
||||||
// Find the root group
|
// Find the root group
|
||||||
String siteGroup = buildSiteGroup(site);
|
String siteGroup = AbstractSiteWebScript.buildSiteGroup(site);
|
||||||
|
|
||||||
// Get all the child groups of the site (but not children of them)
|
// Get all the child groups of the site (but not children of them)
|
||||||
Set<String> siteGroups = authorityService.getContainedAuthorities(
|
Set<String> siteGroups = authorityService.getContainedAuthorities(
|
||||||
@@ -265,7 +265,7 @@ public class SiteExportGet extends AbstractWebScript
|
|||||||
List<NodeRef> exportNodes = new ArrayList<NodeRef>();
|
List<NodeRef> exportNodes = new ArrayList<NodeRef>();
|
||||||
|
|
||||||
// Identify all the users
|
// Identify all the users
|
||||||
String siteGroup = buildSiteGroup(site);
|
String siteGroup = AbstractSiteWebScript.buildSiteGroup(site);
|
||||||
Set<String> siteUsers = authorityService.getContainedAuthorities(
|
Set<String> siteUsers = authorityService.getContainedAuthorities(
|
||||||
AuthorityType.USER, siteGroup, false);
|
AuthorityType.USER, siteGroup, false);
|
||||||
|
|
||||||
@@ -302,11 +302,6 @@ public class SiteExportGet extends AbstractWebScript
|
|||||||
exporterService.exportView(handler, parameters, null);
|
exporterService.exportView(handler, parameters, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected String buildSiteGroup(SiteInfo site)
|
|
||||||
{
|
|
||||||
return "GROUP_site_" + site.getShortName();
|
|
||||||
}
|
|
||||||
|
|
||||||
protected static class CloseIgnoringOutputStream extends FilterOutputStream
|
protected static class CloseIgnoringOutputStream extends FilterOutputStream
|
||||||
{
|
{
|
||||||
public CloseIgnoringOutputStream(OutputStream out)
|
public CloseIgnoringOutputStream(OutputStream out)
|
||||||
|
@@ -0,0 +1,150 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2005-2011 Alfresco Software Limited.
|
||||||
|
*
|
||||||
|
* This file is part of Alfresco
|
||||||
|
*
|
||||||
|
* Alfresco is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU Lesser General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Alfresco is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public License
|
||||||
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
package org.alfresco.repo.web.scripts.site;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.alfresco.repo.security.authority.script.ScriptAuthorityService;
|
||||||
|
import org.alfresco.service.cmr.security.PersonService;
|
||||||
|
import org.alfresco.service.cmr.site.SiteInfo;
|
||||||
|
import org.springframework.extensions.webscripts.Cache;
|
||||||
|
import org.springframework.extensions.webscripts.Status;
|
||||||
|
import org.springframework.extensions.webscripts.WebScriptException;
|
||||||
|
import org.springframework.extensions.webscripts.WebScriptRequest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Lists the members of a site, optionally filtering by name, role
|
||||||
|
* or authority type.
|
||||||
|
*
|
||||||
|
* Based on the old memberships.get.js webscript controller
|
||||||
|
*
|
||||||
|
* @author Nick Burch
|
||||||
|
* @since 4.0
|
||||||
|
*/
|
||||||
|
public class SiteMembershipsGet extends AbstractSiteWebScript
|
||||||
|
{
|
||||||
|
private PersonService personService;
|
||||||
|
private ScriptAuthorityService scriptAuthorityService;
|
||||||
|
|
||||||
|
public void setPersonService(PersonService personService)
|
||||||
|
{
|
||||||
|
this.personService = personService;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setScriptAuthorityService(ScriptAuthorityService scriptAuthorityService)
|
||||||
|
{
|
||||||
|
this.scriptAuthorityService = scriptAuthorityService;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Map<String, Object> executeImpl(SiteInfo site,
|
||||||
|
WebScriptRequest req, Status status, Cache cache)
|
||||||
|
{
|
||||||
|
// Grab out filters
|
||||||
|
String nameFilter = req.getParameter("nf");
|
||||||
|
String roleFilter = req.getParameter("rf");
|
||||||
|
String authorityType = req.getParameter("authorityType");
|
||||||
|
String sizeS = req.getParameter("size");
|
||||||
|
boolean collapseGroups = false;
|
||||||
|
|
||||||
|
// Sanity check the types
|
||||||
|
if(authorityType != null)
|
||||||
|
{
|
||||||
|
if("USER".equals(authorityType))
|
||||||
|
{
|
||||||
|
collapseGroups = true;
|
||||||
|
}
|
||||||
|
else if("GROUP".equals(authorityType))
|
||||||
|
{
|
||||||
|
// No extra settings needed
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
throw new WebScriptException(Status.STATUS_BAD_REQUEST,
|
||||||
|
"The Authority must be one of USER or GROUP");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Figure out what to limit to, if anythign
|
||||||
|
int limit = 0;
|
||||||
|
if(sizeS != null)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
limit = Integer.parseInt(sizeS);
|
||||||
|
}
|
||||||
|
catch(NumberFormatException e)
|
||||||
|
{
|
||||||
|
throw new WebScriptException(Status.STATUS_BAD_REQUEST,
|
||||||
|
"Invalid size specified");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Fetch the membership details of the site
|
||||||
|
Map<String, String> members = this.siteService.listMembers(
|
||||||
|
site.getShortName(), nameFilter, roleFilter, limit, collapseGroups);
|
||||||
|
|
||||||
|
|
||||||
|
// Process it ready for FreeMarker
|
||||||
|
// Note that as usernames may be all numbers, we need to
|
||||||
|
// prefix them with an underscore otherwise FTL can get confused!
|
||||||
|
Map<String,Object> authorities = new HashMap<String, Object>(members.size());
|
||||||
|
Map<String,String> roles = new LinkedHashMap<String, String>(members.size());
|
||||||
|
for(String authorityName : members.keySet())
|
||||||
|
{
|
||||||
|
String role = members.get(authorityName);
|
||||||
|
String ftlSafeName = "_" + authorityName;
|
||||||
|
|
||||||
|
if(authorityName.startsWith("GROUP_"))
|
||||||
|
{
|
||||||
|
if(authorityType == null || authorityType.equals("GROUP"))
|
||||||
|
{
|
||||||
|
// Record the details
|
||||||
|
authorities.put(
|
||||||
|
ftlSafeName,
|
||||||
|
scriptAuthorityService.getGroupForFullAuthorityName(authorityName)
|
||||||
|
);
|
||||||
|
roles.put(ftlSafeName, role);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(authorityType == null || authorityType.equals("USER"))
|
||||||
|
{
|
||||||
|
// Record the details
|
||||||
|
authorities.put(
|
||||||
|
ftlSafeName,
|
||||||
|
personService.getPerson(authorityName)
|
||||||
|
);
|
||||||
|
roles.put(ftlSafeName, role);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pass the details to freemarker
|
||||||
|
Map<String,Object> model = new HashMap<String, Object>();
|
||||||
|
model.put("site", site);
|
||||||
|
model.put("roles", roles);
|
||||||
|
model.put("authorities", authorities);
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
}
|
@@ -70,6 +70,7 @@ public class SiteServiceTest extends BaseWebScriptTest
|
|||||||
private static final String USER_ONE = "SiteTestOne";
|
private static final String USER_ONE = "SiteTestOne";
|
||||||
private static final String USER_TWO = "SiteTestTwo";
|
private static final String USER_TWO = "SiteTestTwo";
|
||||||
private static final String USER_THREE = "SiteTestThree";
|
private static final String USER_THREE = "SiteTestThree";
|
||||||
|
private static final String USER_NUMERIC = "1234567890";
|
||||||
|
|
||||||
private static final String URL_SITES = "/api/sites";
|
private static final String URL_SITES = "/api/sites";
|
||||||
private static final String URL_SITES_QUERY = URL_SITES + "/query";
|
private static final String URL_SITES_QUERY = URL_SITES + "/query";
|
||||||
@@ -96,6 +97,7 @@ public class SiteServiceTest extends BaseWebScriptTest
|
|||||||
createUser(USER_ONE);
|
createUser(USER_ONE);
|
||||||
createUser(USER_TWO);
|
createUser(USER_TWO);
|
||||||
createUser(USER_THREE);
|
createUser(USER_THREE);
|
||||||
|
createUser(USER_NUMERIC);
|
||||||
|
|
||||||
// Do tests as user one
|
// Do tests as user one
|
||||||
this.authenticationComponent.setCurrentUser(USER_ONE);
|
this.authenticationComponent.setCurrentUser(USER_ONE);
|
||||||
@@ -117,6 +119,14 @@ public class SiteServiceTest extends BaseWebScriptTest
|
|||||||
this.personService.createPerson(ppOne);
|
this.personService.createPerson(ppOne);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
private void deleteUser(String username)
|
||||||
|
{
|
||||||
|
this.personService.deletePerson(username);
|
||||||
|
if(this.authenticationService.authenticationExists(username))
|
||||||
|
{
|
||||||
|
this.authenticationService.deleteAuthentication(username);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void tearDown() throws Exception
|
protected void tearDown() throws Exception
|
||||||
@@ -132,6 +142,12 @@ public class SiteServiceTest extends BaseWebScriptTest
|
|||||||
|
|
||||||
// Clear the list
|
// Clear the list
|
||||||
this.createdSites.clear();
|
this.createdSites.clear();
|
||||||
|
|
||||||
|
// Clear the users
|
||||||
|
deleteUser(USER_ONE);
|
||||||
|
deleteUser(USER_TWO);
|
||||||
|
deleteUser(USER_THREE);
|
||||||
|
deleteUser(USER_NUMERIC);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testCreateSite() throws Exception
|
public void testCreateSite() throws Exception
|
||||||
@@ -350,6 +366,42 @@ public class SiteServiceTest extends BaseWebScriptTest
|
|||||||
JSONArray result2 = new JSONArray(response.getContentAsString());
|
JSONArray result2 = new JSONArray(response.getContentAsString());
|
||||||
assertNotNull(result2);
|
assertNotNull(result2);
|
||||||
assertEquals(2, result2.length());
|
assertEquals(2, result2.length());
|
||||||
|
|
||||||
|
|
||||||
|
// Add another user, with a fully numeric username
|
||||||
|
membership = new JSONObject();
|
||||||
|
membership.put("role", SiteModel.SITE_CONTRIBUTOR);
|
||||||
|
person = new JSONObject();
|
||||||
|
person.put("userName", USER_NUMERIC);
|
||||||
|
membership.put("person", person);
|
||||||
|
response = sendRequest(new PostRequest(URL_SITES + "/" + shortName + URL_MEMBERSHIPS, membership.toString(), "application/json"), 200);
|
||||||
|
|
||||||
|
// Check the details are correct for one user
|
||||||
|
membership = new JSONObject(response.getContentAsString());
|
||||||
|
assertEquals(SiteModel.SITE_CONTRIBUTOR, membership.get("role"));
|
||||||
|
assertEquals(USER_NUMERIC, membership.getJSONObject("authority").get("userName"));
|
||||||
|
|
||||||
|
|
||||||
|
// Check the membership list
|
||||||
|
response = sendRequest(new GetRequest(URL_SITES + "/" + shortName + URL_MEMBERSHIPS), 200);
|
||||||
|
String json = response.getContentAsString();
|
||||||
|
JSONArray result3 = new JSONArray(json);
|
||||||
|
assertNotNull(result3);
|
||||||
|
assertEquals(3, result3.length());
|
||||||
|
|
||||||
|
// Check the everyone has the correct membership
|
||||||
|
// (The webscript returns the users in order to make testing easier)
|
||||||
|
membership = result3.getJSONObject(0);
|
||||||
|
assertEquals(SiteModel.SITE_MANAGER, membership.get("role"));
|
||||||
|
assertEquals(USER_ONE, membership.getJSONObject("authority").get("userName"));
|
||||||
|
|
||||||
|
membership = result3.getJSONObject(1);
|
||||||
|
assertEquals(SiteModel.SITE_CONSUMER, membership.get("role"));
|
||||||
|
assertEquals(USER_TWO, membership.getJSONObject("authority").get("userName"));
|
||||||
|
|
||||||
|
membership = result3.getJSONObject(2);
|
||||||
|
assertEquals(SiteModel.SITE_CONTRIBUTOR, membership.get("role"));
|
||||||
|
assertEquals(USER_NUMERIC, membership.getJSONObject("authority").get("userName"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public void testGetMembership() throws Exception
|
public void testGetMembership() throws Exception
|
||||||
|
Reference in New Issue
Block a user