RM-2548: Admin's security clearance should not be editable.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@113335 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
David Webster
2015-09-29 10:05:44 +00:00
parent 0b01a6c9ef
commit d9fdc81a33
4 changed files with 55 additions and 8 deletions

View File

@@ -9,7 +9,8 @@
"firstName": <#if pi.firstName??>"${pi.firstName}"<#else>null</#if>,
"lastName": <#if pi.lastName??>"${pi.lastName}"<#else>null</#if>,
"fullName": <#if pi.firstName?? && pi.lastName??>"${pi.firstName} ${pi.lastName}"<#else>"${pi.userName}"</#if>,
"completeName": <#if pi.firstName?? && pi.lastName?? && pi.userName??>"${pi.firstName} ${pi.lastName} (${pi.userName})"<#else>"${pi.userName}"</#if>
"completeName": <#if pi.firstName?? && pi.lastName?? && pi.userName??>"${pi.firstName} ${pi.lastName} (${pi.userName})"<#else>"${pi.userName}"</#if>,
"isEditable": <#if people.isAdmin(people.getPerson(pi.userName))>false<#else>true</#if>
</#escape>
}
</#macro>

View File

@@ -18,6 +18,7 @@
*/
package org.alfresco.module.org_alfresco_module_rm.script.classification;
import static java.util.Collections.emptyMap;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Matchers.any;
@@ -31,6 +32,7 @@ import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -41,12 +43,14 @@ import org.alfresco.module.org_alfresco_module_rm.classification.SecurityClearan
import org.alfresco.module.org_alfresco_module_rm.classification.UserQueryParams;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseWebScriptUnitTest;
import org.alfresco.query.PagingResults;
import org.alfresco.repo.jscript.ScriptNode;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.security.PersonService.PersonInfo;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.Pair;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Ignore;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
@@ -184,7 +188,7 @@ public class UserSecurityClearanceGetUnitTest extends BaseWebScriptUnitTest
@Override
public Pair<Integer, Integer> getTotalResultCount()
{
return new Pair<Integer, Integer>(numberOfUsers, numberOfUsers);
return new Pair<>(numberOfUsers, numberOfUsers);
}
@Override
@@ -202,6 +206,14 @@ public class UserSecurityClearanceGetUnitTest extends BaseWebScriptUnitTest
assertEquals(expected, mapper.readTree(response.toString()));
}
@Override protected Map<String, ScriptNode> getMockedPeople()
{
final Map<String, ScriptNode> people = super.getMockedPeople();
return people;
}
/**
* Check that when supplying a single field with no sort direction, the UserQueryParams are populated with the
* specified field and the default direction (true).
@@ -285,9 +297,10 @@ public class UserSecurityClearanceGetUnitTest extends BaseWebScriptUnitTest
items += "{" +
"\"firstName\": \"aFirstName" + fromIndex + "\"," +
"\"lastName\": \"aLastName" + fromIndex + "\"," +
"\"clearanceLabel\": \"displayLabel" + fromIndex + "\"," +
"\"isEditable\": true," +
"\"completeName\": \"aFirstName" + fromIndex + " aLastName" + fromIndex + " (aUserName" + fromIndex + ")\"," +
"\"fullName\": \"aFirstName" + fromIndex + " aLastName" + fromIndex + "\"," +
"\"clearanceLabel\": \"displayLabel" + fromIndex + "\"," +
"\"userName\": \"aUserName" + fromIndex + "\"," +
"\"classificationId\": \"id" + fromIndex + "\"" +
"}";

View File

@@ -94,7 +94,12 @@ public class UserSecurityClearancePutUnitTest extends BaseWebScriptUnitTest
// check the JSON result using Jackson to allow easy equality testing.
ObjectMapper mapper = new ObjectMapper();
String expectedJSONString = "{\"data\":{\"firstName\":\"Firstname\",\"lastName\":\"Lastname\",\"completeName\":\"Firstname Lastname (user1)\",\"fullName\":\"Firstname Lastname\",\"clearanceLabel\":\"Don't tell anyone\",\"userName\":\"user1\",\"classificationId\":\"Top Secret\"}}";
String expectedJSONString = "{\"data\":{\"firstName\":\"Firstname\",\"lastName\":\"Lastname\"," +
"\"clearanceLabel\":\"Don't tell anyone\"," +
"\"isEditable\":true," +
"\"userName\":\"user1\"," +
"\"completeName\":\"Firstname Lastname (user1)\",\"fullName\":\"Firstname Lastname\"," +
"\"classificationId\":\"Top Secret\"}}";
JsonNode expected = mapper.readTree(expectedJSONString);
assertEquals(expected, mapper.readTree(json.toString()));
}

View File

@@ -18,15 +18,21 @@
*/
package org.alfresco.module.org_alfresco_module_rm.test.util;
import static java.util.Collections.emptyMap;
import static org.mockito.Matchers.anyString;
import static org.mockito.Mockito.doAnswer;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import java.io.StringWriter;
import java.util.HashMap;
import java.util.Map;
import org.alfresco.repo.jscript.People;
import org.alfresco.repo.jscript.ScriptNode;
import org.json.JSONObject;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;
@@ -125,7 +131,7 @@ public abstract class BaseWebScriptUnitTest extends BaseUnitTest
*/
protected String executeWebScript(Map<String, String> parameters) throws Exception
{
return executeWebScript( parameters, null);
return executeWebScript(parameters, null);
}
/**
@@ -240,10 +246,11 @@ public abstract class BaseWebScriptUnitTest extends BaseUnitTest
doReturn(mockedScriptProcessorRegistry).when(mockedContainer).getScriptProcessorRegistry();
doReturn(mockedTemplateProcessorRegistry).when(mockedContainer).getTemplateProcessorRegistry();
Map<String, Object> containerTemplateParameters = new HashMap<String, Object>(5);
Map<String, Object> containerTemplateParameters = new HashMap<>(5);
containerTemplateParameters.put("jsonUtils", new JSONUtils());
containerTemplateParameters.put("people", getMockedPeopleObject());
doReturn(containerTemplateParameters).when(mockedContainer).getTemplateParameters();
SearchPath mockedSearchPath = mock(SearchPath.class);
doReturn(false).when(mockedSearchPath).hasDocument(anyString());
doReturn(mockedSearchPath).when(mockedContainer).getSearchPath();
@@ -252,7 +259,28 @@ public abstract class BaseWebScriptUnitTest extends BaseUnitTest
Description mockDescription = mock(Description.class);
doReturn(mock(RequiredCache.class)).when(mockDescription).getRequiredCache();
return mockedContainer;
return mockedContainer;
}
/**
* Creates a mock {@code people} object for use as a root object within FTL.
* This {@code people} object will return person nodes as specified in {@link #getMockedPeople()}.
*/
protected People getMockedPeopleObject()
{
People p = mock(People.class);
getMockedPeople().forEach((name, person) -> when(p.getPerson(eq(name))).thenReturn(person) );
return p;
}
/**
* Creates a map of person ScriptNodes for use within FTL.
* The default implementation is an empty map, but this can be overridden by subclasses.
* @return a map of usernames to mocked ScriptNode objects representing person nodes.
*/
protected Map<String, ScriptNode> getMockedPeople()
{
return emptyMap();
}
/**