mirror of
https://github.com/sismics/docs.git
synced 2024-11-25 15:17:57 +01:00
#18: Handle new audit log for groups, filter users by group
This commit is contained in:
parent
7be2e1b9e5
commit
21b3ba2bf6
@ -61,13 +61,6 @@
|
|||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/main/jni" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
<sourceFolder url="file://$MODULE_DIR$/src/main/rs" isTestSource="false" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
<sourceFolder url="file://$MODULE_DIR$/src/test/res" type="java-test-resource" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
<sourceFolder url="file://$MODULE_DIR$/src/test/assets" type="java-test-resource" />
|
||||||
@ -75,53 +68,48 @@
|
|||||||
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/test/jni" isTestSource="true" />
|
||||||
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/res" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/resources" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/assets" type="java-test-resource" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/aidl" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/java" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/jni" isTestSource="true" />
|
||||||
|
<sourceFolder url="file://$MODULE_DIR$/src/androidTest/rs" isTestSource="true" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/builds" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/23.2.1/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.2.1/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/animated-vector-drawable/23.2.0/jars" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/23.2.1/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/appcompat-v7/23.2.0/jars" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.2.1/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/design/23.2.0/jars" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.2.1/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/recyclerview-v7/23.2.0/jars" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/23.2.1/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-v4/23.2.0/jars" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/com.android.support/support-vector-drawable/23.2.0/jars" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/it.sephiroth.android.library.easing/android-easing/1.0.3/jars" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/it.sephiroth.android.library.easing/android-easing/1.0.3/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/it.sephiroth.android.library.imagezoom/imagezoom/1.0.5/jars" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/exploded-aar/it.sephiroth.android.library.imagezoom/imagezoom/1.0.5/jars" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-classes" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-runtime-classes" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-verifier" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/instant-run-support" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/manifests" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/reload-dex" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/res" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/restart-dex" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/rs" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/symbols" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
|
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
|
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
|
||||||
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
|
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
|
<orderEntry type="jdk" jdkName="Android API 23 Platform" jdkType="Android SDK" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
<orderEntry type="library" exported="" name="support-v4-23.2.0" level="project" />
|
<orderEntry type="library" exported="" name="support-v4-23.2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="android-easing-1.0.3" level="project" />
|
<orderEntry type="library" exported="" name="android-easing-1.0.3" level="project" />
|
||||||
<orderEntry type="library" exported="" name="imagezoom-1.0.5" level="project" />
|
<orderEntry type="library" exported="" name="imagezoom-1.0.5" level="project" />
|
||||||
<orderEntry type="library" exported="" name="design-23.2.0" level="project" />
|
<orderEntry type="library" exported="" name="design-23.2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="okhttp-urlconnection-3.1.1" level="project" />
|
<orderEntry type="library" exported="" name="okhttp-urlconnection-3.1.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="picasso-2.5.2" level="project" />
|
<orderEntry type="library" exported="" name="picasso-2.5.2" level="project" />
|
||||||
<orderEntry type="library" exported="" name="animated-vector-drawable-23.2.0" level="project" />
|
<orderEntry type="library" exported="" name="animated-vector-drawable-23.2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="recyclerview-v7-23.2.0" level="project" />
|
<orderEntry type="library" exported="" name="recyclerview-v7-23.2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="support-annotations-23.2.0" level="project" />
|
<orderEntry type="library" exported="" name="support-annotations-23.2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="okhttp-3.1.1" level="project" />
|
<orderEntry type="library" exported="" name="okhttp-3.1.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="support-vector-drawable-23.2.0" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="okio-1.6.0" level="project" />
|
<orderEntry type="library" exported="" name="okio-1.6.0" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="support-vector-drawable-23.2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="picasso2-okhttp3-downloader-1.0.2" level="project" />
|
<orderEntry type="library" exported="" name="picasso2-okhttp3-downloader-1.0.2" level="project" />
|
||||||
<orderEntry type="library" exported="" name="appcompat-v7-23.2.0" level="project" />
|
|
||||||
<orderEntry type="library" exported="" name="tokenautocomplete-1.2.1" level="project" />
|
<orderEntry type="library" exported="" name="tokenautocomplete-1.2.1" level="project" />
|
||||||
|
<orderEntry type="library" exported="" name="appcompat-v7-23.2.1" level="project" />
|
||||||
<orderEntry type="library" exported="" name="eventbus-3.0.0" level="project" />
|
<orderEntry type="library" exported="" name="eventbus-3.0.0" level="project" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
@ -3,7 +3,7 @@ buildscript {
|
|||||||
jcenter()
|
jcenter()
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:2.1.0-alpha1'
|
classpath 'com.android.tools.build:gradle:2.1.0-alpha3'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
apply plugin: 'com.android.application'
|
apply plugin: 'com.android.application'
|
||||||
@ -50,9 +50,9 @@ android {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile fileTree(dir: 'libs', include: '*.jar')
|
compile fileTree(dir: 'libs', include: '*.jar')
|
||||||
compile 'com.android.support:appcompat-v7:23.2.0'
|
compile 'com.android.support:appcompat-v7:23.2.1'
|
||||||
compile 'com.android.support:recyclerview-v7:23.2.0'
|
compile 'com.android.support:recyclerview-v7:23.2.1'
|
||||||
compile 'com.android.support:design:23.2.0'
|
compile 'com.android.support:design:23.2.1'
|
||||||
compile 'it.sephiroth.android.library.imagezoom:imagezoom:1.0.5'
|
compile 'it.sephiroth.android.library.imagezoom:imagezoom:1.0.5'
|
||||||
compile 'org.greenrobot:eventbus:3.0.0'
|
compile 'org.greenrobot:eventbus:3.0.0'
|
||||||
compile 'com.squareup.picasso:picasso:2.5.2'
|
compile 'com.squareup.picasso:picasso:2.5.2'
|
||||||
|
@ -76,6 +76,7 @@ public class AuditLogListAdapter extends BaseAdapter {
|
|||||||
case "Acl":
|
case "Acl":
|
||||||
case "Tag":
|
case "Tag":
|
||||||
case "User":
|
case "User":
|
||||||
|
case "Group":
|
||||||
message.append(" : ");
|
message.append(" : ");
|
||||||
message.append(log.optString("message"));
|
message.append(log.optString("message"));
|
||||||
break;
|
break;
|
||||||
|
@ -35,7 +35,7 @@ public class GroupDao {
|
|||||||
* Returns a group by name.
|
* Returns a group by name.
|
||||||
*
|
*
|
||||||
* @param name Name
|
* @param name Name
|
||||||
* @return Tag
|
* @return Group
|
||||||
*/
|
*/
|
||||||
public Group getActiveByName(String name) {
|
public Group getActiveByName(String name) {
|
||||||
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
EntityManager em = ThreadLocalContext.get().getEntityManager();
|
||||||
|
@ -281,6 +281,11 @@ public class UserDao {
|
|||||||
parameterMap.put("search", "%" + criteria.getSearch() + "%");
|
parameterMap.put("search", "%" + criteria.getSearch() + "%");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (criteria.getGroupId() != null) {
|
||||||
|
sb.append(" join T_USER_GROUP ug on ug.UGP_IDUSER_C = u.USE_ID_C and ug.UGP_IDGROUP_C = :groupId and ug.UGP_DELETEDATE_D is null ");
|
||||||
|
parameterMap.put("groupId", criteria.getGroupId());
|
||||||
|
}
|
||||||
|
|
||||||
criteriaList.add("u.USE_DELETEDATE_D is null");
|
criteriaList.add("u.USE_DELETEDATE_D is null");
|
||||||
|
|
||||||
if (!criteriaList.isEmpty()) {
|
if (!criteriaList.isEmpty()) {
|
||||||
|
@ -11,6 +11,11 @@ public class UserCriteria {
|
|||||||
*/
|
*/
|
||||||
private String search;
|
private String search;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Group ID.
|
||||||
|
*/
|
||||||
|
private String groupId;
|
||||||
|
|
||||||
public String getSearch() {
|
public String getSearch() {
|
||||||
return search;
|
return search;
|
||||||
}
|
}
|
||||||
@ -19,4 +24,13 @@ public class UserCriteria {
|
|||||||
this.search = search;
|
this.search = search;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getGroupId() {
|
||||||
|
return groupId;
|
||||||
|
}
|
||||||
|
|
||||||
|
public UserCriteria setGroupId(String groupId) {
|
||||||
|
this.groupId = groupId;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,7 @@ import com.sismics.docs.core.model.context.AppContext;
|
|||||||
import com.sismics.docs.core.model.jpa.AuthenticationToken;
|
import com.sismics.docs.core.model.jpa.AuthenticationToken;
|
||||||
import com.sismics.docs.core.model.jpa.Document;
|
import com.sismics.docs.core.model.jpa.Document;
|
||||||
import com.sismics.docs.core.model.jpa.File;
|
import com.sismics.docs.core.model.jpa.File;
|
||||||
|
import com.sismics.docs.core.model.jpa.Group;
|
||||||
import com.sismics.docs.core.model.jpa.User;
|
import com.sismics.docs.core.model.jpa.User;
|
||||||
import com.sismics.docs.core.util.EncryptionUtil;
|
import com.sismics.docs.core.util.EncryptionUtil;
|
||||||
import com.sismics.docs.core.util.jpa.SortCriteria;
|
import com.sismics.docs.core.util.jpa.SortCriteria;
|
||||||
@ -534,13 +535,15 @@ public class UserResource extends BaseResource {
|
|||||||
*
|
*
|
||||||
* @param sortColumn Sort index
|
* @param sortColumn Sort index
|
||||||
* @param asc If true, ascending sorting, else descending
|
* @param asc If true, ascending sorting, else descending
|
||||||
|
* @param groupName Only return users from this group
|
||||||
* @return Response
|
* @return Response
|
||||||
*/
|
*/
|
||||||
@GET
|
@GET
|
||||||
@Path("list")
|
@Path("list")
|
||||||
public Response list(
|
public Response list(
|
||||||
@QueryParam("sort_column") Integer sortColumn,
|
@QueryParam("sort_column") Integer sortColumn,
|
||||||
@QueryParam("asc") Boolean asc) {
|
@QueryParam("asc") Boolean asc,
|
||||||
|
@QueryParam("group") String groupName) {
|
||||||
if (!authenticate()) {
|
if (!authenticate()) {
|
||||||
throw new ForbiddenClientException();
|
throw new ForbiddenClientException();
|
||||||
}
|
}
|
||||||
@ -548,8 +551,18 @@ public class UserResource extends BaseResource {
|
|||||||
JsonArrayBuilder users = Json.createArrayBuilder();
|
JsonArrayBuilder users = Json.createArrayBuilder();
|
||||||
SortCriteria sortCriteria = new SortCriteria(sortColumn, asc);
|
SortCriteria sortCriteria = new SortCriteria(sortColumn, asc);
|
||||||
|
|
||||||
|
// Validate the group
|
||||||
|
String groupId = null;
|
||||||
|
if (!Strings.isNullOrEmpty(groupName)) {
|
||||||
|
GroupDao groupDao = new GroupDao();
|
||||||
|
Group group = groupDao.getActiveByName(groupName);
|
||||||
|
if (group != null) {
|
||||||
|
groupId = group.getId();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
UserDao userDao = new UserDao();
|
UserDao userDao = new UserDao();
|
||||||
List<UserDto> userDtoList = userDao.findByCriteria(new UserCriteria(), sortCriteria);
|
List<UserDto> userDtoList = userDao.findByCriteria(new UserCriteria().setGroupId(groupId), sortCriteria);
|
||||||
for (UserDto userDto : userDtoList) {
|
for (UserDto userDto : userDtoList) {
|
||||||
users.add(Json.createObjectBuilder()
|
users.add(Json.createObjectBuilder()
|
||||||
.add("id", userDto.getId())
|
.add("id", userDto.getId())
|
||||||
|
@ -36,6 +36,9 @@
|
|||||||
<span ng-switch-when="User">
|
<span ng-switch-when="User">
|
||||||
<a href="#/user/{{ log.message }}">{{ log.message }}</a>
|
<a href="#/user/{{ log.message }}">{{ log.message }}</a>
|
||||||
</span>
|
</span>
|
||||||
|
<span ng-switch-when="Group">
|
||||||
|
<a href="#/group/{{ log.message }}">{{ log.message }}</a>
|
||||||
|
</span>
|
||||||
</span>
|
</span>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
@ -86,6 +86,15 @@ public class TestGroupResource extends BaseJerseyTest {
|
|||||||
Assert.assertEquals("g112", groups.getString(0));
|
Assert.assertEquals("g112", groups.getString(0));
|
||||||
Assert.assertEquals("g12", groups.getString(1));
|
Assert.assertEquals("g12", groups.getString(1));
|
||||||
|
|
||||||
|
// List all users in group1
|
||||||
|
json = target().path("/user/list")
|
||||||
|
.queryParam("group", "g112")
|
||||||
|
.request()
|
||||||
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
||||||
|
.get(JsonObject.class);
|
||||||
|
JsonArray users = json.getJsonArray("users");
|
||||||
|
Assert.assertEquals(1, users.size());
|
||||||
|
|
||||||
// Add group1 to g112 (again)
|
// Add group1 to g112 (again)
|
||||||
json = target().path("/group/g112").request()
|
json = target().path("/group/g112").request()
|
||||||
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
.cookie(TokenBasedSecurityFilter.COOKIE_NAME, adminToken)
|
||||||
|
Loading…
Reference in New Issue
Block a user