diff --git a/ccm-core/findbugs-exclude.xml b/ccm-core/findbugs-exclude.xml new file mode 100644 index 000000000..9056b7d08 --- /dev/null +++ b/ccm-core/findbugs-exclude.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/ccm-core/pom.xml b/ccm-core/pom.xml index 3c57f1520..7a6c65041 100644 --- a/ccm-core/pom.xml +++ b/ccm-core/pom.xml @@ -341,6 +341,9 @@ org.codehaus.mojo findbugs-maven-plugin 3.0.1 + + findbugs-exclude.xml + org.apache.maven.plugins @@ -370,6 +373,54 @@ /rulesets/java/unnecessary.xml /rulesets/java/unusedcode.xml + + src/main/java/com/arsdigita + + + **/AbstractConfig.java + **/AbstractParameter.java + **/AbstractParameterContext + **/Assert.java + **/Classes.java + **/CCMApplicationContextListener.java + **/CCMResourceManager.java + **/ClassParameterReader.java + **/CompoundParameterReader.java + **/ConfigError.java + **/ConfigRegistry.java + **/Converters.java + **/CSVParameterReader.java + **/DateFormatter.java + **/DataFormatterConfig.java + **/DateTimeFormatter + **/Document.java + **/Element.java + **/EmailParameter.java + **/EnumerationParameter.java + **/ErrorList.java + **/ExceptionUnwrapper.java + **/Exceptions.java + **/FileParameter.java + **/FullDateFormatter.java + **/IntegerParameter.java + **/JavaPropertyReader.java + **/JavaPropertyWriter.java + **/KernelConfig.java + **/LockableImpl.java + **/MapParameter.java + **/Parameter.java + **/ParameterError.java + **/ParameterException.java + **/RegistryConfig.java + **/ResourceParameter.java + **/SecurityConfig.java + **/SecurityHelper.java + **/SingletonParameter.java + **/StringParameter.java + **/TimeFormatter.java + **/UncheckedWrapperException + **/XML.java + diff --git a/ccm-core/src/main/java/org/libreccm/core/Permission.java b/ccm-core/src/main/java/org/libreccm/core/Permission.java index feeeecb10..5e44c3ff4 100644 --- a/ccm-core/src/main/java/org/libreccm/core/Permission.java +++ b/ccm-core/src/main/java/org/libreccm/core/Permission.java @@ -51,12 +51,26 @@ import javax.xml.bind.annotation.XmlRootElement; query = "SELECT p FROM Permission p WHERE p.grantee = :subject"), @NamedQuery(name = "findPermissionsForUser", query = "SELECT p FROM Permission p " - + "WHERE p.grantee = :user " - + " OR p.grantee IN (SELECT g " - + " FROM Group g JOIN g.members m" - + " WHERE m.user = :user)"), + + "WHERE p.grantee = :user " + + " OR p.grantee IN (SELECT g " + + " FROM Group g JOIN g.members m" + + " WHERE m.user = :user)"), @NamedQuery(name = "findPermissionsForCcmObject", - query = "SELECT p FROM Permission p WHERE p.object = :object") + query = "SELECT p FROM Permission p WHERE p.object = :object"), + @NamedQuery(name = "findPermissionsByUserObjectAndPrivilege", + query = "SELECT p FROM Permission p " + + "WHERE (p.grantee = :user" + + " OR p.grantee IN (SELECT g " + + " FROM Group g JOIN g.members m" + + " WHERE m.user = :user))" + + " AND p.grantedPrivilege = :privilege" + + " AND p.object = :object"), + @NamedQuery(name = "findPermissionsBySubjectObjectAndPrivilege", + query = "SELECT p FROM Permission p " + + "WHERE p.grantee = :subject" + + " AND p.grantedPrivilege = :privilege" + + " AND p.object = :object") + }) //Can't reduce complexity yet @SuppressWarnings({"PMD.CyclomaticComplexity", @@ -164,7 +178,7 @@ public class Permission implements Serializable { public int hashCode() { int hash = 3; hash - = 31 * hash + (int) (permissionId ^ (permissionId >>> 32)); + = 31 * hash + (int) (permissionId ^ (permissionId >>> 32)); hash = 31 * hash + Objects.hashCode(grantee); hash = 31 * hash + Objects.hashCode(grantedPrivilege); hash = 31 * hash + Objects.hashCode(object); @@ -221,14 +235,14 @@ public class Permission implements Serializable { @Override public String toString() { return String.format("%s{ " - + "permissionId = %d, " - + "grantee = %s, " - + "grantedPrivilege = %s, " - + "object = %s, " - + "creationUser = %s," - + "creationDate = %tF %Jens Pelzetter */ @RequestScoped public class PermissionRepository - extends AbstractEntityRepository { + extends AbstractEntityRepository { @Inject - private EntityManager entityManager; + private transient EntityManager entityManager; + /** + * {@inheritDoc} + * + * @return {@inheritDoc} + */ @Override public Class getEntityClass() { return Permission.class; } + /** + * {@inheritDoc } + * + * @param entity {@inheritDoc } + * @return {@inheritDoc } + */ @Override public boolean isNew(final Permission entity) { if (entity == null) { - throw new UnsupportedOperationException( - "Entity to save can't be null"); + throw new IllegalArgumentException("Entity to save can't be null"); } return entity.getPermissionId() == 0; } + /** + * Finds all permissions granted to a specific subject (either a user or + * group). + * + * Please note that this method does not find permissions + * granted to a user by the groups a user is member of. To get these + * permissions also use the + * {@link #findPermissionsForUser(org.libreccm.core.User)} method instead. + * + * @param subject The subject. + * @return All permissions granted to the provided subject. + */ public List findPermissionsForSubject(final Subject subject) { if (subject == null) { throw new IllegalArgumentException( - "Illegal value 'null' provided for parameter subject."); + "Illegal value 'null' provided for parameter subject."); } final TypedQuery query = entityManager.createNamedQuery( - "findPermissionsForSubject", Permission.class); + "findPermissionsForSubject", Permission.class); query.setParameter("subject", subject); return query.getResultList(); } + /** + * Finds a permissions granted to a user and to the groups the user is + * member of. + * + * If you only need the permissions assigned to the user itself use the + * {@link #findPermissionsForSubject(org.libreccm.core.Subject)} method. + * + * @param user The user. + * @return All permissions granted to the user or the groups the user is + * member of. + */ public List findPermissionsForUser(final User user) { if (user == null) { throw new IllegalArgumentException( - "Illegal value 'null' provided for parameter user"); + "Illegal value 'null' provided for parameter user"); } final TypedQuery query = entityManager.createNamedQuery( - "findPermissionsForUser", Permission.class); + "findPermissionsForUser", Permission.class); query.setParameter("user", user); - + return query.getResultList(); } + /** + * Finds all permissions granted on a object. + * + * @param object The object. + * @return All permissions granted on the object. + */ public List findPermissionsForCcmObject(final CcmObject object) { if (object == null) { throw new IllegalArgumentException( - "Illegal value 'null' provided for parameter object."); + "Illegal value 'null' provided for parameter object."); } final TypedQuery query = entityManager.createNamedQuery( - "findPermissionsForCcmObject", Permission.class); + "findPermissionsForCcmObject", Permission.class); query.setParameter("object", object); return query.getResultList(); } +// public List findPermissionForUserPrivilegeAndObject( +// final User user, +// final Privilege privilege, +// final CcmObject object) { +// if (user == null) { +// throw new IllegalArgumentException( +// "Illegal value 'null' provided for parameter user"); +// } +// +// if (privilege == null) { +// throw new IllegalArgumentException( +// "Illegal value 'null' provided for parameter privilege"); +// } +// +// final TypedQuery query = entityManager.createNamedQuery( +// "findPermissionsForUserPrivilegeAndObject", Permission.class); +// +// } } diff --git a/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java b/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java index b93488033..bed9f9e55 100644 --- a/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java +++ b/ccm-core/src/test/java/org/libreccm/core/DatasetsTest.java @@ -54,6 +54,9 @@ public class DatasetsTest extends DatasetsVerifier { "/datasets/org/libreccm/core/GroupRepositoryTest/after-delete.json", "/datasets/org/libreccm/core/GroupRepositoryTest/after-save-changed.json", "/datasets/org/libreccm/core/GroupRepositoryTest/after-save-new.json", + "/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json", + "/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json", + "/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json", "/datasets/org/libreccm/core/PermissionRepositoryTest/data.json", "/datasets/org/libreccm/core/RoleRepositoryTest/data.json", "/datasets/org/libreccm/core/RoleRepositoryTest/after-delete.json", diff --git a/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java b/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java index 48a1ea654..b4467bdf8 100644 --- a/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java +++ b/ccm-core/src/test/java/org/libreccm/core/PermissionRepositoryTest.java @@ -51,6 +51,10 @@ import java.util.List; import java.util.Set; import javax.inject.Inject; +import javax.persistence.EntityManager; +import javax.persistence.TypedQuery; +import org.jboss.arquillian.container.test.api.ShouldThrowException; +import org.jboss.arquillian.persistence.ShouldMatchDataSet; /** * @@ -74,6 +78,9 @@ public class PermissionRepositoryTest { @Inject private transient CcmObjectRepository ccmObjectRepository; + @Inject + private transient EntityManager entityManager; + public PermissionRepositoryTest() { } @@ -96,10 +103,10 @@ public class PermissionRepositoryTest { @Deployment public static WebArchive createDeployment() { final PomEquippedResolveStage pom = Maven - .resolver() - .loadPomFromFile("pom.xml"); + .resolver() + .loadPomFromFile("pom.xml"); final PomEquippedResolveStage dependencies = pom. - importCompileAndRuntimeDependencies(); + importCompileAndRuntimeDependencies(); final File[] libs = dependencies.resolve().withTransitivity().asFile(); for (File lib : libs) { @@ -108,31 +115,31 @@ public class PermissionRepositoryTest { } return ShrinkWrap - .create(WebArchive.class, - "LibreCCM-org.libreccm.core.UserRepositoryTest.war") - .addPackage(User.class.getPackage()) - .addPackage(org.libreccm.web.Application.class.getPackage()) - .addPackage(org.libreccm.categorization.Category.class. - getPackage()) - .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()). - addPackage(org.libreccm.jpa.EntityManagerProducer.class - .getPackage()) - .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class - .getPackage()) - .addPackage(org.libreccm.testutils.EqualsVerifier.class. - getPackage()) - .addPackage(org.libreccm.tests.categories.IntegrationTest.class - .getPackage()) - .addAsLibraries(libs) - .addAsResource("test-persistence.xml", - "META-INF/persistence.xml") - .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml") - .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml"); + .create(WebArchive.class, + "LibreCCM-org.libreccm.core.UserRepositoryTest.war") + .addPackage(User.class.getPackage()) + .addPackage(org.libreccm.web.Application.class.getPackage()) + .addPackage(org.libreccm.categorization.Category.class. + getPackage()) + .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()). + addPackage(org.libreccm.jpa.EntityManagerProducer.class + .getPackage()) + .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class + .getPackage()) + .addPackage(org.libreccm.testutils.EqualsVerifier.class. + getPackage()) + .addPackage(org.libreccm.tests.categories.IntegrationTest.class + .getPackage()) + .addAsLibraries(libs) + .addAsResource("test-persistence.xml", + "META-INF/persistence.xml") + .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml") + .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml"); } @Test @UsingDataSet( - "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") + "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") @InSequence(10) public void findPermissionsForSubject() { final User jdoe = userRepository.findByScreenName("jdoe"); @@ -148,7 +155,7 @@ public class PermissionRepositoryTest { assertThat(authors, is(not(nullValue()))); final List permissionsJdoe = permissionRepository - .findPermissionsForSubject(jdoe); + .findPermissionsForSubject(jdoe); assertThat(permissionsJdoe.size(), is(1)); assertThat(permissionsJdoe.get(0).getObject().getDisplayName(), is(equalTo("Test Object 2"))); @@ -156,18 +163,18 @@ public class PermissionRepositoryTest { is(equalTo("read"))); final List permissionsMmuster = permissionRepository - .findPermissionsForSubject(mmuster); + .findPermissionsForSubject(mmuster); assertThat(permissionsMmuster.size(), is(0)); final List permissionsAdmins = permissionRepository - .findPermissionsForSubject(admins); + .findPermissionsForSubject(admins); assertThat(permissionsAdmins.size(), is(1)); assertThat(permissionsAdmins.get(0).getObject(), is(nullValue())); assertThat(permissionsAdmins.get(0).getGrantedPrivilege().getPrivilege(), is("admin")); final List permissionsUsers = permissionRepository - .findPermissionsForSubject(users); + .findPermissionsForSubject(users); assertThat(permissionsUsers.size(), is(1)); assertThat(permissionsUsers.get(0).getObject().getDisplayName(), is(equalTo("Test Object 1"))); @@ -175,7 +182,7 @@ public class PermissionRepositoryTest { is(equalTo("read"))); final List permissionsAuthors = permissionRepository - .findPermissionsForSubject(authors); + .findPermissionsForSubject(authors); assertThat(permissionsAuthors.size(), is(2)); assertThat(permissionsAuthors.get(0).getObject().getDisplayName(), is(equalTo("Test Object 1"))); @@ -183,16 +190,25 @@ public class PermissionRepositoryTest { is(equalTo("Test Object 1"))); final Set privileges = new HashSet<>(); privileges.add(permissionsAuthors.get(0).getGrantedPrivilege() - .getPrivilege()); + .getPrivilege()); privileges.add(permissionsAuthors.get(1).getGrantedPrivilege() - .getPrivilege()); + .getPrivilege()); assertThat(privileges, hasItem("read")); assertThat(privileges, hasItem("write")); } + @Test(expected = IllegalArgumentException.class) + @UsingDataSet( + "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") + @ShouldThrowException(IllegalArgumentException.class) + @InSequence(11) + public void findPermissionsForNullSubject() { + permissionRepository.findPermissionsForSubject(null); + } + @Test @UsingDataSet( - "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") + "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") @InSequence(20) public void findPermissionsForUser() { final User jdoe = userRepository.findByScreenName("jdoe"); @@ -201,7 +217,7 @@ public class PermissionRepositoryTest { assertThat(mmuster, is(not(nullValue()))); final List jdoePermissions = permissionRepository - .findPermissionsForUser(jdoe); + .findPermissionsForUser(jdoe); assertThat(jdoePermissions.size(), is(4)); jdoePermissions.sort(new Comparator() { @@ -209,19 +225,20 @@ public class PermissionRepositoryTest { public int compare(final Permission permission1, final Permission permission2) { int result = permission1.getGrantedPrivilege().getPrivilege() - .compareToIgnoreCase(permission2.getGrantedPrivilege() - .getPrivilege()); + .compareToIgnoreCase(permission2.getGrantedPrivilege() + .getPrivilege()); if (result == 0) { result = permission1.getObject().getDisplayName().compareTo( - permission2.getObject().getDisplayName()); + permission2.getObject().getDisplayName()); } else { return result; } if (result == 0) { return permission1.getGrantee().getClass().getName() - .compareTo(permission2.getGrantee().getClass().getName()); + .compareTo(permission2.getGrantee().getClass(). + getName()); } else { return result; } @@ -248,17 +265,26 @@ public class PermissionRepositoryTest { is(equalTo("Test Object 1"))); final List mmusterPermissions = permissionRepository - .findPermissionsForUser(mmuster); + .findPermissionsForUser(mmuster); assertThat(mmusterPermissions.size(), is(1)); assertThat(mmusterPermissions.get(0).getGrantedPrivilege() - .getPrivilege(), + .getPrivilege(), is(equalTo("admin"))); assertThat(mmusterPermissions.get(0).getObject(), is(nullValue())); } + @Test(expected = IllegalArgumentException.class) + @UsingDataSet( + "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") + @ShouldThrowException(IllegalArgumentException.class) + @InSequence(21) + public void findPermissionsForNullUser() { + permissionRepository.findPermissionsForUser(null); + } + @Test @UsingDataSet( - "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") + "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") @InSequence(30) public void findPermissionsForCcmObject() { final CcmObject object1 = ccmObjectRepository.findById(-10L); @@ -266,7 +292,7 @@ public class PermissionRepositoryTest { final CcmObject object3 = ccmObjectRepository.findById(-30L); final List object1Permissions = permissionRepository - .findPermissionsForCcmObject(object1); + .findPermissionsForCcmObject(object1); assertThat(object1Permissions.size(), is(3)); object1Permissions.sort(new Comparator() { @@ -279,21 +305,21 @@ public class PermissionRepositoryTest { }); assertThat(object1Permissions.get(0).getGrantedPrivilege() - .getPrivilege(), + .getPrivilege(), is(equalTo("read"))); assertThat(object1Permissions.get(0).getGrantee(), is(instanceOf(Group.class))); assertThat(((Group) object1Permissions.get(0).getGrantee()).getName(), is(equalTo("authors"))); assertThat(object1Permissions.get(1).getGrantedPrivilege() - .getPrivilege(), + .getPrivilege(), is(equalTo("write"))); assertThat(object1Permissions.get(1).getGrantee(), is(instanceOf(Group.class))); assertThat(((Group) object1Permissions.get(1).getGrantee()).getName(), is(equalTo("authors"))); assertThat(object1Permissions.get(2).getGrantedPrivilege() - .getPrivilege(), + .getPrivilege(), is(equalTo("read"))); assertThat(object1Permissions.get(2).getGrantee(), is(instanceOf(Group.class))); @@ -301,20 +327,115 @@ public class PermissionRepositoryTest { is(equalTo("users"))); final List object2Permissions = permissionRepository - .findPermissionsForCcmObject(object2); + .findPermissionsForCcmObject(object2); assertThat(object2Permissions.size(), is(1)); assertThat(object2Permissions.get(0).getGrantedPrivilege() - .getPrivilege(), + .getPrivilege(), is(equalTo("read"))); assertThat(object2Permissions.get(0).getGrantee(), is(instanceOf(User.class))); assertThat(((User) object2Permissions.get(0).getGrantee()) - .getScreenName(), + .getScreenName(), is(equalTo("jdoe"))); final List object3Permissions = permissionRepository - .findPermissionsForCcmObject(object3); + .findPermissionsForCcmObject(object3); assertThat(object3Permissions, is(empty())); } + @Test(expected = IllegalArgumentException.class) + @UsingDataSet( + "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") + @ShouldThrowException(IllegalArgumentException.class) + @InSequence(31) + public void findPermissionsForNullObject() { + permissionRepository.findPermissionsForCcmObject(null); + } + + @Test + @UsingDataSet( + "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") + @ShouldMatchDataSet(value = "datasets/org/libreccm/core/" + + "PermissionRepositoryTest/after-save-new.json", + excludeColumns = {"permission_id"}) + @InSequence(40) + public void saveNewPermission() { + final User mmuster = userRepository.findByScreenName("mmuster"); + + final TypedQuery query1 = entityManager.createQuery( + "SELECT p FROM Privilege p WHERE p.privilege = 'read'", + Privilege.class); + final TypedQuery query2 = entityManager.createQuery( + "SELECT p FROM Privilege p WHERE p.privilege = 'write'", + Privilege.class); + + final CcmObject object = ccmObjectRepository.findById(-40L); + + final Privilege read = query1.getSingleResult(); + final Privilege write = query2.getSingleResult(); + + assertThat(mmuster, is(not(nullValue()))); + assertThat(read, is(not(nullValue()))); + assertThat(write, is(not(nullValue()))); + assertThat(object, is(not(nullValue()))); + + final Permission permission1 = new Permission(); + permission1.setGrantee(mmuster); + permission1.setGrantedPrivilege(read); + permission1.setObject(object); + + final Permission permission2 = new Permission(); + permission2.setGrantee(mmuster); + permission2.setGrantedPrivilege(write); + permission2.setObject(object); + + permissionRepository.save(permission1); + permissionRepository.save(permission2); + } + + @Test(expected = IllegalArgumentException.class) + @ShouldThrowException(IllegalArgumentException.class) + @InSequence(41) + public void saveNullPermission() { + permissionRepository.save(null); + } + + @Test + @UsingDataSet( + "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") + @ShouldMatchDataSet(value = "datasets/org/libreccm/core/" + + "PermissionRepositoryTest/after-save-changed.json", + excludeColumns = {"permission_id"}) + @InSequence(50) + public void saveChangedPermission() { + final Permission permission = entityManager.find(Permission.class, -40L); + final Group users = groupRepository.findByGroupName("users"); + + assertThat(permission, is(not(nullValue()))); + assertThat(users, is(not(nullValue()))); + + permission.setGrantee(users); + + permissionRepository.save(permission); + } + + @Test + @UsingDataSet( + "datasets/org/libreccm/core/PermissionRepositoryTest/data.json") + @ShouldMatchDataSet(value = "datasets/org/libreccm/core/" + + "PermissionRepositoryTest/after-delete.json", + excludeColumns = {"permission_id"}) + @InSequence(60) + public void deletePermission() { + final Permission permission = entityManager.find(Permission.class, -35L); + + permissionRepository.delete(permission); + } + + @Test(expected = IllegalArgumentException.class) + @ShouldThrowException(IllegalArgumentException.class) + @InSequence(61) + public void deleteNullPermission() { + permissionRepository.delete(null); + } } diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json new file mode 100644 index 000000000..f7a7c3969 --- /dev/null +++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-delete.json @@ -0,0 +1,158 @@ +{ + "subjects": + [ + { + "subject_id": -10 + }, + { + "subject_id": -20 + }, + { + "subject_id": -30 + }, + { + "subject_id": -40 + }, + { + "subject_id": -50 + } + ], + "ccm_users": + [ + { + "banned": false, + "hash_algorithm": "SHA-512", + "family_name": "Doe", + "given_name": "John", + "password": "C+o2w6mp+eLrbluMEgKMVSdP50A9BMethXN8R3yihtkbzt7WfWsde2nmq/t5gq6im3J8i3jw4Y3YrKHou8JQ2A==", + "password_reset_required": false, + "salt": "Fu8FPgqAal4GZp1hDjkOB+t6ITRCcO7HBoN5Xqf29UnVj5NUdUFZRTyKYMBEx6JmZGmHcMDG9OGVCKcEM9oyScSRreJs4B51wM44NM6KeRwbCf+VhBn14DkBrl40ygraNf+AJacKpMyCpFI0O/Am7mMDWL4flskBsylkxaQn3vKfzgN5MVG2szW//I6Q6YEH9AuL8LauS6fKaVynMzzu3xzD8Hjqvvlnzym898eom2lqScPfg5g4e8Ww13HCHAYe6twupAW/BjUNax5HSioEisZN/P1UGrde8uFEj+hbbavrWYZuilPuEu25+/98jyXx6542agqrWN8j0SFYcIyOgA==", + "screen_name": "jdoe", + "subject_id": -10 + }, + { + "banned": false, + "hash_algorithm": "SHA-512", + "family_name": "Mustermann", + "given_name": "Max", + "password": "1c9626af429a6291766d15cbfb38689bd8d49450520765973de70aecaf644b7d4fda711266ba9ec8fb6df30c8ab391d40330829aa85adf371bcde6b4c9bc01e6", + "password_reset_required": false, + "salt": "fjiajhigafgapoa", + "screen_name": "mmuster", + "subject_id": -50 + } + ], + "ccm_groups": + [ + { + "name": "admins", + "subject_id": -20 + }, + { + "name": "users", + "subject_id": -30 + }, + { + "name": "authors", + "subject_id": -40 + } + ], + "user_email_addresses": + [ + { + "user_id": -10, + "email_address": "john.doe@example.com", + "bouncing": false, + "verified": true + }, + { + "user_id": -50, + "email_address": "max.mustermann@example.com", + "bouncing": false, + "verified": true + } + ], + "group_memberships": + [ + { + "membership_id": -10, + "group_subject_id": -30, + "user_subject_id": -10 + }, + { + "membership_id": -20, + "group_subject_id": -40, + "user_subject_id": -10 + }, + { + "membership_id": -30, + "group_subject_id": -20, + "user_subject_id": -50 + } + ], + "ccm_privileges": + [ + { + "privilege_id": -10, + "privilege": "admin" + }, + { + "privilege_id": -20, + "privilege": "read" + }, + { + "privilege_id": -30, + "privilege": "write" + } + ], + "ccm_objects": + [ + { + "object_id": -10, + "display_name": "Test Object 1" + }, + { + "object_id": -20, + "display_name": "Test Object 2" + }, + { + "object_id": -30, + "display_name": "Test Object 3" + }, + { + "object_id": -40, + "display_name": "Test Object 4" + } + ], + "permissions": + [ + { + "permission_id": -10, + "creation_date": "2015-07-29 14:32:46", + "granted_privilege_id": -10, + "grantee_id": -20 + }, + { + "permission_id": -20, + "creation_date": "2015-07-29 14:34:30", + "granted_privilege_id": -20, + "grantee_id": -30, + "object_id": -10 + }, + { + "permission_id": -30, + "creation_date": "2015-07-29 14:36:05", + "granted_privilege_id": -30, + "grantee_id": -40, + "object_id": -10 + }, + { + "permission_id": -40, + "creation_date": "2015-07-29 14:37:22", + "granted_privilege_id": -20, + "grantee_id": -10, + "object_id": -20 + } + ] + +} \ No newline at end of file diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json new file mode 100644 index 000000000..938d78e6e --- /dev/null +++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-changed.json @@ -0,0 +1,165 @@ +{ + "subjects": + [ + { + "subject_id": -10 + }, + { + "subject_id": -20 + }, + { + "subject_id": -30 + }, + { + "subject_id": -40 + }, + { + "subject_id": -50 + } + ], + "ccm_users": + [ + { + "banned": false, + "hash_algorithm": "SHA-512", + "family_name": "Doe", + "given_name": "John", + "password": "C+o2w6mp+eLrbluMEgKMVSdP50A9BMethXN8R3yihtkbzt7WfWsde2nmq/t5gq6im3J8i3jw4Y3YrKHou8JQ2A==", + "password_reset_required": false, + "salt": "Fu8FPgqAal4GZp1hDjkOB+t6ITRCcO7HBoN5Xqf29UnVj5NUdUFZRTyKYMBEx6JmZGmHcMDG9OGVCKcEM9oyScSRreJs4B51wM44NM6KeRwbCf+VhBn14DkBrl40ygraNf+AJacKpMyCpFI0O/Am7mMDWL4flskBsylkxaQn3vKfzgN5MVG2szW//I6Q6YEH9AuL8LauS6fKaVynMzzu3xzD8Hjqvvlnzym898eom2lqScPfg5g4e8Ww13HCHAYe6twupAW/BjUNax5HSioEisZN/P1UGrde8uFEj+hbbavrWYZuilPuEu25+/98jyXx6542agqrWN8j0SFYcIyOgA==", + "screen_name": "jdoe", + "subject_id": -10 + }, + { + "banned": false, + "hash_algorithm": "SHA-512", + "family_name": "Mustermann", + "given_name": "Max", + "password": "1c9626af429a6291766d15cbfb38689bd8d49450520765973de70aecaf644b7d4fda711266ba9ec8fb6df30c8ab391d40330829aa85adf371bcde6b4c9bc01e6", + "password_reset_required": false, + "salt": "fjiajhigafgapoa", + "screen_name": "mmuster", + "subject_id": -50 + } + ], + "ccm_groups": + [ + { + "name": "admins", + "subject_id": -20 + }, + { + "name": "users", + "subject_id": -30 + }, + { + "name": "authors", + "subject_id": -40 + } + ], + "user_email_addresses": + [ + { + "user_id": -10, + "email_address": "john.doe@example.com", + "bouncing": false, + "verified": true + }, + { + "user_id": -50, + "email_address": "max.mustermann@example.com", + "bouncing": false, + "verified": true + } + ], + "group_memberships": + [ + { + "membership_id": -10, + "group_subject_id": -30, + "user_subject_id": -10 + }, + { + "membership_id": -20, + "group_subject_id": -40, + "user_subject_id": -10 + }, + { + "membership_id": -30, + "group_subject_id": -20, + "user_subject_id": -50 + } + ], + "ccm_privileges": + [ + { + "privilege_id": -10, + "privilege": "admin" + }, + { + "privilege_id": -20, + "privilege": "read" + }, + { + "privilege_id": -30, + "privilege": "write" + } + ], + "ccm_objects": + [ + { + "object_id": -10, + "display_name": "Test Object 1" + }, + { + "object_id": -20, + "display_name": "Test Object 2" + }, + { + "object_id": -30, + "display_name": "Test Object 3" + }, + { + "object_id": -40, + "display_name": "Test Object 4" + } + ], + "permissions": + [ + { + "permission_id": -10, + "creation_date": "2015-07-29 14:32:46", + "granted_privilege_id": -10, + "grantee_id": -20 + }, + { + "permission_id": -20, + "creation_date": "2015-07-29 14:34:30", + "granted_privilege_id": -20, + "grantee_id": -30, + "object_id": -10 + }, + { + "permission_id": -30, + "creation_date": "2015-07-29 14:36:05", + "granted_privilege_id": -30, + "grantee_id": -40, + "object_id": -10 + }, + { + "permission_id": -35, + "creation_date": "2015-07-29 14:57:55", + "granted_privilege_id": -20, + "grantee_id": -40, + "object_id": -10 + }, + { + "permission_id": -40, + "creation_date": "2015-07-29 14:37:22", + "granted_privilege_id": -20, + "grantee_id": -30, + "object_id": -20 + } + ] + +} \ No newline at end of file diff --git a/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json new file mode 100644 index 000000000..cb9927517 --- /dev/null +++ b/ccm-core/src/test/resources/datasets/org/libreccm/core/PermissionRepositoryTest/after-save-new.json @@ -0,0 +1,177 @@ +{ + "subjects": + [ + { + "subject_id": -10 + }, + { + "subject_id": -20 + }, + { + "subject_id": -30 + }, + { + "subject_id": -40 + }, + { + "subject_id": -50 + } + ], + "ccm_users": + [ + { + "banned": false, + "hash_algorithm": "SHA-512", + "family_name": "Doe", + "given_name": "John", + "password": "C+o2w6mp+eLrbluMEgKMVSdP50A9BMethXN8R3yihtkbzt7WfWsde2nmq/t5gq6im3J8i3jw4Y3YrKHou8JQ2A==", + "password_reset_required": false, + "salt": "Fu8FPgqAal4GZp1hDjkOB+t6ITRCcO7HBoN5Xqf29UnVj5NUdUFZRTyKYMBEx6JmZGmHcMDG9OGVCKcEM9oyScSRreJs4B51wM44NM6KeRwbCf+VhBn14DkBrl40ygraNf+AJacKpMyCpFI0O/Am7mMDWL4flskBsylkxaQn3vKfzgN5MVG2szW//I6Q6YEH9AuL8LauS6fKaVynMzzu3xzD8Hjqvvlnzym898eom2lqScPfg5g4e8Ww13HCHAYe6twupAW/BjUNax5HSioEisZN/P1UGrde8uFEj+hbbavrWYZuilPuEu25+/98jyXx6542agqrWN8j0SFYcIyOgA==", + "screen_name": "jdoe", + "subject_id": -10 + }, + { + "banned": false, + "hash_algorithm": "SHA-512", + "family_name": "Mustermann", + "given_name": "Max", + "password": "1c9626af429a6291766d15cbfb38689bd8d49450520765973de70aecaf644b7d4fda711266ba9ec8fb6df30c8ab391d40330829aa85adf371bcde6b4c9bc01e6", + "password_reset_required": false, + "salt": "fjiajhigafgapoa", + "screen_name": "mmuster", + "subject_id": -50 + } + ], + "ccm_groups": + [ + { + "name": "admins", + "subject_id": -20 + }, + { + "name": "users", + "subject_id": -30 + }, + { + "name": "authors", + "subject_id": -40 + } + ], + "user_email_addresses": + [ + { + "user_id": -10, + "email_address": "john.doe@example.com", + "bouncing": false, + "verified": true + }, + { + "user_id": -50, + "email_address": "max.mustermann@example.com", + "bouncing": false, + "verified": true + } + ], + "group_memberships": + [ + { + "membership_id": -10, + "group_subject_id": -30, + "user_subject_id": -10 + }, + { + "membership_id": -20, + "group_subject_id": -40, + "user_subject_id": -10 + }, + { + "membership_id": -30, + "group_subject_id": -20, + "user_subject_id": -50 + } + ], + "ccm_privileges": + [ + { + "privilege_id": -10, + "privilege": "admin" + }, + { + "privilege_id": -20, + "privilege": "read" + }, + { + "privilege_id": -30, + "privilege": "write" + } + ], + "ccm_objects": + [ + { + "object_id": -10, + "display_name": "Test Object 1" + }, + { + "object_id": -20, + "display_name": "Test Object 2" + }, + { + "object_id": -30, + "display_name": "Test Object 3" + }, + { + "object_id": -40, + "display_name": "Test Object 4" + } + ], + "permissions": + [ + { + "permission_id": -10, + "creation_date": "2015-07-29 14:32:46", + "granted_privilege_id": -10, + "grantee_id": -20 + }, + { + "permission_id": -20, + "creation_date": "2015-07-29 14:34:30", + "granted_privilege_id": -20, + "grantee_id": -30, + "object_id": -10 + }, + { + "permission_id": -30, + "creation_date": "2015-07-29 14:36:05", + "granted_privilege_id": -30, + "grantee_id": -40, + "object_id": -10 + }, + { + "permission_id": -35, + "creation_date": "2015-07-29 14:57:55", + "granted_privilege_id": -20, + "grantee_id": -40, + "object_id": -10 + }, + { + "permission_id": -40, + "creation_date": "2015-07-29 14:37:22", + "granted_privilege_id": -20, + "grantee_id": -10, + "object_id": -20 + }, + { + "permission_id": -50, + "granted_privilege_id": -20, + "grantee_id": -50, + "object_id": -40 + }, + { + "permission_id": -50, + "granted_privilege_id": -30, + "grantee_id": -50, + "object_id": -40 + } + ] + +} \ No newline at end of file