- Excluded some of the old com.arsdigita classes from FindBugs and PMD to keep the reports clear so that we can focus on the 
      new org.libreccm classes and the important com.arsdigita classes
    - PermisssionRepository and tests. PermissionRepository will provided some maybe offer more queries.


git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3537 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2015-07-30 12:16:31 +00:00
parent e02af14df1
commit f3a443a6ab
9 changed files with 841 additions and 73 deletions

View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<FindBugsFilter>
<Match>
<Class name="com.arsdigita.util.parameter.CSVParameterReader" />
</Match>
<Match>
<Class name="com.arsdigita.util.parameter.ResourceParameter" />
</Match>
<Match>
<Class name="com.arsdigita.xml.Document" />
</Match>
<Match>
<Class name="com.arsdigita.xml.Element" />
</Match>
<Match>
<Class name="com.arsdigita.xml.formatters.DateFormatter" />
</Match>
<Match>
<Class name="com.arsdigita.xml.formatters.FullDateFormatter" />
</Match>
</FindBugsFilter>

View File

@ -341,6 +341,9 @@
<groupId>org.codehaus.mojo</groupId> <groupId>org.codehaus.mojo</groupId>
<artifactId>findbugs-maven-plugin</artifactId> <artifactId>findbugs-maven-plugin</artifactId>
<version>3.0.1</version> <version>3.0.1</version>
<configuration>
<excludeFilterFile>findbugs-exclude.xml</excludeFilterFile>
</configuration>
</plugin> </plugin>
<plugin> <plugin>
<groupId>org.apache.maven.plugins</groupId> <groupId>org.apache.maven.plugins</groupId>
@ -370,6 +373,54 @@
<ruleset>/rulesets/java/unnecessary.xml</ruleset> <ruleset>/rulesets/java/unnecessary.xml</ruleset>
<ruleset>/rulesets/java/unusedcode.xml</ruleset> <ruleset>/rulesets/java/unusedcode.xml</ruleset>
</rulesets> </rulesets>
<excludeRoots>
<excludeRoot>src/main/java/com/arsdigita</excludeRoot>
</excludeRoots>
<excludes>
<exclude>**/AbstractConfig.java</exclude>
<exclude>**/AbstractParameter.java</exclude>
<exclude>**/AbstractParameterContext</exclude>
<exclude>**/Assert.java</exclude>
<exclude>**/Classes.java</exclude>
<exclude>**/CCMApplicationContextListener.java</exclude>
<exclude>**/CCMResourceManager.java</exclude>
<exclude>**/ClassParameterReader.java</exclude>
<exclude>**/CompoundParameterReader.java</exclude>
<exclude>**/ConfigError.java</exclude>
<exclude>**/ConfigRegistry.java</exclude>
<exclude>**/Converters.java</exclude>
<exclude>**/CSVParameterReader.java</exclude>
<exclude>**/DateFormatter.java</exclude>
<exclude>**/DataFormatterConfig.java</exclude>
<exclude>**/DateTimeFormatter</exclude>
<exclude>**/Document.java</exclude>
<exclude>**/Element.java</exclude>
<exclude>**/EmailParameter.java</exclude>
<exclude>**/EnumerationParameter.java</exclude>
<exclude>**/ErrorList.java</exclude>
<exclude>**/ExceptionUnwrapper.java</exclude>
<exclude>**/Exceptions.java</exclude>
<exclude>**/FileParameter.java</exclude>
<exclude>**/FullDateFormatter.java</exclude>
<exclude>**/IntegerParameter.java</exclude>
<exclude>**/JavaPropertyReader.java</exclude>
<exclude>**/JavaPropertyWriter.java</exclude>
<exclude>**/KernelConfig.java</exclude>
<exclude>**/LockableImpl.java</exclude>
<exclude>**/MapParameter.java</exclude>
<exclude>**/Parameter.java</exclude>
<exclude>**/ParameterError.java</exclude>
<exclude>**/ParameterException.java</exclude>
<exclude>**/RegistryConfig.java</exclude>
<exclude>**/ResourceParameter.java</exclude>
<exclude>**/SecurityConfig.java</exclude>
<exclude>**/SecurityHelper.java</exclude>
<exclude>**/SingletonParameter.java</exclude>
<exclude>**/StringParameter.java</exclude>
<exclude>**/TimeFormatter.java</exclude>
<exclude>**/UncheckedWrapperException</exclude>
<exclude>**/XML.java</exclude>
</excludes>
</configuration> </configuration>
</plugin> </plugin>
<plugin> <plugin>

View File

@ -51,12 +51,26 @@ import javax.xml.bind.annotation.XmlRootElement;
query = "SELECT p FROM Permission p WHERE p.grantee = :subject"), query = "SELECT p FROM Permission p WHERE p.grantee = :subject"),
@NamedQuery(name = "findPermissionsForUser", @NamedQuery(name = "findPermissionsForUser",
query = "SELECT p FROM Permission p " query = "SELECT p FROM Permission p "
+ "WHERE p.grantee = :user " + "WHERE p.grantee = :user "
+ " OR p.grantee IN (SELECT g " + " OR p.grantee IN (SELECT g "
+ " FROM Group g JOIN g.members m" + " FROM Group g JOIN g.members m"
+ " WHERE m.user = :user)"), + " WHERE m.user = :user)"),
@NamedQuery(name = "findPermissionsForCcmObject", @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 //Can't reduce complexity yet
@SuppressWarnings({"PMD.CyclomaticComplexity", @SuppressWarnings({"PMD.CyclomaticComplexity",
@ -164,7 +178,7 @@ public class Permission implements Serializable {
public int hashCode() { public int hashCode() {
int hash = 3; int hash = 3;
hash hash
= 31 * hash + (int) (permissionId ^ (permissionId >>> 32)); = 31 * hash + (int) (permissionId ^ (permissionId >>> 32));
hash = 31 * hash + Objects.hashCode(grantee); hash = 31 * hash + Objects.hashCode(grantee);
hash = 31 * hash + Objects.hashCode(grantedPrivilege); hash = 31 * hash + Objects.hashCode(grantedPrivilege);
hash = 31 * hash + Objects.hashCode(object); hash = 31 * hash + Objects.hashCode(object);
@ -221,14 +235,14 @@ public class Permission implements Serializable {
@Override @Override
public String toString() { public String toString() {
return String.format("%s{ " return String.format("%s{ "
+ "permissionId = %d, " + "permissionId = %d, "
+ "grantee = %s, " + "grantee = %s, "
+ "grantedPrivilege = %s, " + "grantedPrivilege = %s, "
+ "object = %s, " + "object = %s, "
+ "creationUser = %s," + "creationUser = %s,"
+ "creationDate = %tF %<tT, " + "creationDate = %tF %<tT, "
+ "creationIp = %s" + "creationIp = %s"
+ " }", + " }",
super.toString(), super.toString(),
permissionId, permissionId,
Objects.toString(grantee), Objects.toString(grantee),

View File

@ -26,67 +26,125 @@ import javax.persistence.EntityManager;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;
/** /**
* Repository class for retrieving, storing and deleting permissions.
* *
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
@RequestScoped @RequestScoped
public class PermissionRepository public class PermissionRepository
extends AbstractEntityRepository<Long, Permission> { extends AbstractEntityRepository<Long, Permission> {
@Inject @Inject
private EntityManager entityManager; private transient EntityManager entityManager;
/**
* {@inheritDoc}
*
* @return {@inheritDoc}
*/
@Override @Override
public Class<Permission> getEntityClass() { public Class<Permission> getEntityClass() {
return Permission.class; return Permission.class;
} }
/**
* {@inheritDoc }
*
* @param entity {@inheritDoc }
* @return {@inheritDoc }
*/
@Override @Override
public boolean isNew(final Permission entity) { public boolean isNew(final Permission entity) {
if (entity == null) { if (entity == null) {
throw new UnsupportedOperationException( throw new IllegalArgumentException("Entity to save can't be null");
"Entity to save can't be null");
} }
return entity.getPermissionId() == 0; return entity.getPermissionId() == 0;
} }
/**
* Finds all permissions granted to a specific subject (either a user or
* group).
*
* Please note that this method does <strong>not</strong> 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<Permission> findPermissionsForSubject(final Subject subject) { public List<Permission> findPermissionsForSubject(final Subject subject) {
if (subject == null) { if (subject == null) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Illegal value 'null' provided for parameter subject."); "Illegal value 'null' provided for parameter subject.");
} }
final TypedQuery<Permission> query = entityManager.createNamedQuery( final TypedQuery<Permission> query = entityManager.createNamedQuery(
"findPermissionsForSubject", Permission.class); "findPermissionsForSubject", Permission.class);
query.setParameter("subject", subject); query.setParameter("subject", subject);
return query.getResultList(); 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<Permission> findPermissionsForUser(final User user) { public List<Permission> findPermissionsForUser(final User user) {
if (user == null) { if (user == null) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Illegal value 'null' provided for parameter user"); "Illegal value 'null' provided for parameter user");
} }
final TypedQuery<Permission> query = entityManager.createNamedQuery( final TypedQuery<Permission> query = entityManager.createNamedQuery(
"findPermissionsForUser", Permission.class); "findPermissionsForUser", Permission.class);
query.setParameter("user", user); query.setParameter("user", user);
return query.getResultList(); return query.getResultList();
} }
/**
* Finds all permissions granted on a object.
*
* @param object The object.
* @return All permissions granted on the object.
*/
public List<Permission> findPermissionsForCcmObject(final CcmObject object) { public List<Permission> findPermissionsForCcmObject(final CcmObject object) {
if (object == null) { if (object == null) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Illegal value 'null' provided for parameter object."); "Illegal value 'null' provided for parameter object.");
} }
final TypedQuery<Permission> query = entityManager.createNamedQuery( final TypedQuery<Permission> query = entityManager.createNamedQuery(
"findPermissionsForCcmObject", Permission.class); "findPermissionsForCcmObject", Permission.class);
query.setParameter("object", object); query.setParameter("object", object);
return query.getResultList(); return query.getResultList();
} }
// public List<Permission> 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<Permission> query = entityManager.createNamedQuery(
// "findPermissionsForUserPrivilegeAndObject", Permission.class);
//
// }
} }

View File

@ -54,6 +54,9 @@ public class DatasetsTest extends DatasetsVerifier {
"/datasets/org/libreccm/core/GroupRepositoryTest/after-delete.json", "/datasets/org/libreccm/core/GroupRepositoryTest/after-delete.json",
"/datasets/org/libreccm/core/GroupRepositoryTest/after-save-changed.json", "/datasets/org/libreccm/core/GroupRepositoryTest/after-save-changed.json",
"/datasets/org/libreccm/core/GroupRepositoryTest/after-save-new.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/PermissionRepositoryTest/data.json",
"/datasets/org/libreccm/core/RoleRepositoryTest/data.json", "/datasets/org/libreccm/core/RoleRepositoryTest/data.json",
"/datasets/org/libreccm/core/RoleRepositoryTest/after-delete.json", "/datasets/org/libreccm/core/RoleRepositoryTest/after-delete.json",

View File

@ -51,6 +51,10 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import javax.inject.Inject; 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 @Inject
private transient CcmObjectRepository ccmObjectRepository; private transient CcmObjectRepository ccmObjectRepository;
@Inject
private transient EntityManager entityManager;
public PermissionRepositoryTest() { public PermissionRepositoryTest() {
} }
@ -96,10 +103,10 @@ public class PermissionRepositoryTest {
@Deployment @Deployment
public static WebArchive createDeployment() { public static WebArchive createDeployment() {
final PomEquippedResolveStage pom = Maven final PomEquippedResolveStage pom = Maven
.resolver() .resolver()
.loadPomFromFile("pom.xml"); .loadPomFromFile("pom.xml");
final PomEquippedResolveStage dependencies = pom. final PomEquippedResolveStage dependencies = pom.
importCompileAndRuntimeDependencies(); importCompileAndRuntimeDependencies();
final File[] libs = dependencies.resolve().withTransitivity().asFile(); final File[] libs = dependencies.resolve().withTransitivity().asFile();
for (File lib : libs) { for (File lib : libs) {
@ -108,31 +115,31 @@ public class PermissionRepositoryTest {
} }
return ShrinkWrap return ShrinkWrap
.create(WebArchive.class, .create(WebArchive.class,
"LibreCCM-org.libreccm.core.UserRepositoryTest.war") "LibreCCM-org.libreccm.core.UserRepositoryTest.war")
.addPackage(User.class.getPackage()) .addPackage(User.class.getPackage())
.addPackage(org.libreccm.web.Application.class.getPackage()) .addPackage(org.libreccm.web.Application.class.getPackage())
.addPackage(org.libreccm.categorization.Category.class. .addPackage(org.libreccm.categorization.Category.class.
getPackage()) getPackage())
.addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()). .addPackage(org.libreccm.l10n.LocalizedString.class.getPackage()).
addPackage(org.libreccm.jpa.EntityManagerProducer.class addPackage(org.libreccm.jpa.EntityManagerProducer.class
.getPackage()) .getPackage())
.addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class .addPackage(org.libreccm.jpa.utils.MimeTypeConverter.class
.getPackage()) .getPackage())
.addPackage(org.libreccm.testutils.EqualsVerifier.class. .addPackage(org.libreccm.testutils.EqualsVerifier.class.
getPackage()) getPackage())
.addPackage(org.libreccm.tests.categories.IntegrationTest.class .addPackage(org.libreccm.tests.categories.IntegrationTest.class
.getPackage()) .getPackage())
.addAsLibraries(libs) .addAsLibraries(libs)
.addAsResource("test-persistence.xml", .addAsResource("test-persistence.xml",
"META-INF/persistence.xml") "META-INF/persistence.xml")
.addAsWebInfResource("test-web.xml", "WEB-INF/web.xml") .addAsWebInfResource("test-web.xml", "WEB-INF/web.xml")
.addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml"); .addAsWebInfResource(EmptyAsset.INSTANCE, "WEB-INF/beans.xml");
} }
@Test @Test
@UsingDataSet( @UsingDataSet(
"datasets/org/libreccm/core/PermissionRepositoryTest/data.json") "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@InSequence(10) @InSequence(10)
public void findPermissionsForSubject() { public void findPermissionsForSubject() {
final User jdoe = userRepository.findByScreenName("jdoe"); final User jdoe = userRepository.findByScreenName("jdoe");
@ -148,7 +155,7 @@ public class PermissionRepositoryTest {
assertThat(authors, is(not(nullValue()))); assertThat(authors, is(not(nullValue())));
final List<Permission> permissionsJdoe = permissionRepository final List<Permission> permissionsJdoe = permissionRepository
.findPermissionsForSubject(jdoe); .findPermissionsForSubject(jdoe);
assertThat(permissionsJdoe.size(), is(1)); assertThat(permissionsJdoe.size(), is(1));
assertThat(permissionsJdoe.get(0).getObject().getDisplayName(), assertThat(permissionsJdoe.get(0).getObject().getDisplayName(),
is(equalTo("Test Object 2"))); is(equalTo("Test Object 2")));
@ -156,18 +163,18 @@ public class PermissionRepositoryTest {
is(equalTo("read"))); is(equalTo("read")));
final List<Permission> permissionsMmuster = permissionRepository final List<Permission> permissionsMmuster = permissionRepository
.findPermissionsForSubject(mmuster); .findPermissionsForSubject(mmuster);
assertThat(permissionsMmuster.size(), is(0)); assertThat(permissionsMmuster.size(), is(0));
final List<Permission> permissionsAdmins = permissionRepository final List<Permission> permissionsAdmins = permissionRepository
.findPermissionsForSubject(admins); .findPermissionsForSubject(admins);
assertThat(permissionsAdmins.size(), is(1)); assertThat(permissionsAdmins.size(), is(1));
assertThat(permissionsAdmins.get(0).getObject(), is(nullValue())); assertThat(permissionsAdmins.get(0).getObject(), is(nullValue()));
assertThat(permissionsAdmins.get(0).getGrantedPrivilege().getPrivilege(), assertThat(permissionsAdmins.get(0).getGrantedPrivilege().getPrivilege(),
is("admin")); is("admin"));
final List<Permission> permissionsUsers = permissionRepository final List<Permission> permissionsUsers = permissionRepository
.findPermissionsForSubject(users); .findPermissionsForSubject(users);
assertThat(permissionsUsers.size(), is(1)); assertThat(permissionsUsers.size(), is(1));
assertThat(permissionsUsers.get(0).getObject().getDisplayName(), assertThat(permissionsUsers.get(0).getObject().getDisplayName(),
is(equalTo("Test Object 1"))); is(equalTo("Test Object 1")));
@ -175,7 +182,7 @@ public class PermissionRepositoryTest {
is(equalTo("read"))); is(equalTo("read")));
final List<Permission> permissionsAuthors = permissionRepository final List<Permission> permissionsAuthors = permissionRepository
.findPermissionsForSubject(authors); .findPermissionsForSubject(authors);
assertThat(permissionsAuthors.size(), is(2)); assertThat(permissionsAuthors.size(), is(2));
assertThat(permissionsAuthors.get(0).getObject().getDisplayName(), assertThat(permissionsAuthors.get(0).getObject().getDisplayName(),
is(equalTo("Test Object 1"))); is(equalTo("Test Object 1")));
@ -183,16 +190,25 @@ public class PermissionRepositoryTest {
is(equalTo("Test Object 1"))); is(equalTo("Test Object 1")));
final Set<String> privileges = new HashSet<>(); final Set<String> privileges = new HashSet<>();
privileges.add(permissionsAuthors.get(0).getGrantedPrivilege() privileges.add(permissionsAuthors.get(0).getGrantedPrivilege()
.getPrivilege()); .getPrivilege());
privileges.add(permissionsAuthors.get(1).getGrantedPrivilege() privileges.add(permissionsAuthors.get(1).getGrantedPrivilege()
.getPrivilege()); .getPrivilege());
assertThat(privileges, hasItem("read")); assertThat(privileges, hasItem("read"));
assertThat(privileges, hasItem("write")); 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 @Test
@UsingDataSet( @UsingDataSet(
"datasets/org/libreccm/core/PermissionRepositoryTest/data.json") "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@InSequence(20) @InSequence(20)
public void findPermissionsForUser() { public void findPermissionsForUser() {
final User jdoe = userRepository.findByScreenName("jdoe"); final User jdoe = userRepository.findByScreenName("jdoe");
@ -201,7 +217,7 @@ public class PermissionRepositoryTest {
assertThat(mmuster, is(not(nullValue()))); assertThat(mmuster, is(not(nullValue())));
final List<Permission> jdoePermissions = permissionRepository final List<Permission> jdoePermissions = permissionRepository
.findPermissionsForUser(jdoe); .findPermissionsForUser(jdoe);
assertThat(jdoePermissions.size(), is(4)); assertThat(jdoePermissions.size(), is(4));
jdoePermissions.sort(new Comparator<Permission>() { jdoePermissions.sort(new Comparator<Permission>() {
@ -209,19 +225,20 @@ public class PermissionRepositoryTest {
public int compare(final Permission permission1, public int compare(final Permission permission1,
final Permission permission2) { final Permission permission2) {
int result = permission1.getGrantedPrivilege().getPrivilege() int result = permission1.getGrantedPrivilege().getPrivilege()
.compareToIgnoreCase(permission2.getGrantedPrivilege() .compareToIgnoreCase(permission2.getGrantedPrivilege()
.getPrivilege()); .getPrivilege());
if (result == 0) { if (result == 0) {
result = permission1.getObject().getDisplayName().compareTo( result = permission1.getObject().getDisplayName().compareTo(
permission2.getObject().getDisplayName()); permission2.getObject().getDisplayName());
} else { } else {
return result; return result;
} }
if (result == 0) { if (result == 0) {
return permission1.getGrantee().getClass().getName() return permission1.getGrantee().getClass().getName()
.compareTo(permission2.getGrantee().getClass().getName()); .compareTo(permission2.getGrantee().getClass().
getName());
} else { } else {
return result; return result;
} }
@ -248,17 +265,26 @@ public class PermissionRepositoryTest {
is(equalTo("Test Object 1"))); is(equalTo("Test Object 1")));
final List<Permission> mmusterPermissions = permissionRepository final List<Permission> mmusterPermissions = permissionRepository
.findPermissionsForUser(mmuster); .findPermissionsForUser(mmuster);
assertThat(mmusterPermissions.size(), is(1)); assertThat(mmusterPermissions.size(), is(1));
assertThat(mmusterPermissions.get(0).getGrantedPrivilege() assertThat(mmusterPermissions.get(0).getGrantedPrivilege()
.getPrivilege(), .getPrivilege(),
is(equalTo("admin"))); is(equalTo("admin")));
assertThat(mmusterPermissions.get(0).getObject(), is(nullValue())); 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 @Test
@UsingDataSet( @UsingDataSet(
"datasets/org/libreccm/core/PermissionRepositoryTest/data.json") "datasets/org/libreccm/core/PermissionRepositoryTest/data.json")
@InSequence(30) @InSequence(30)
public void findPermissionsForCcmObject() { public void findPermissionsForCcmObject() {
final CcmObject object1 = ccmObjectRepository.findById(-10L); final CcmObject object1 = ccmObjectRepository.findById(-10L);
@ -266,7 +292,7 @@ public class PermissionRepositoryTest {
final CcmObject object3 = ccmObjectRepository.findById(-30L); final CcmObject object3 = ccmObjectRepository.findById(-30L);
final List<Permission> object1Permissions = permissionRepository final List<Permission> object1Permissions = permissionRepository
.findPermissionsForCcmObject(object1); .findPermissionsForCcmObject(object1);
assertThat(object1Permissions.size(), is(3)); assertThat(object1Permissions.size(), is(3));
object1Permissions.sort(new Comparator<Permission>() { object1Permissions.sort(new Comparator<Permission>() {
@ -279,21 +305,21 @@ public class PermissionRepositoryTest {
}); });
assertThat(object1Permissions.get(0).getGrantedPrivilege() assertThat(object1Permissions.get(0).getGrantedPrivilege()
.getPrivilege(), .getPrivilege(),
is(equalTo("read"))); is(equalTo("read")));
assertThat(object1Permissions.get(0).getGrantee(), assertThat(object1Permissions.get(0).getGrantee(),
is(instanceOf(Group.class))); is(instanceOf(Group.class)));
assertThat(((Group) object1Permissions.get(0).getGrantee()).getName(), assertThat(((Group) object1Permissions.get(0).getGrantee()).getName(),
is(equalTo("authors"))); is(equalTo("authors")));
assertThat(object1Permissions.get(1).getGrantedPrivilege() assertThat(object1Permissions.get(1).getGrantedPrivilege()
.getPrivilege(), .getPrivilege(),
is(equalTo("write"))); is(equalTo("write")));
assertThat(object1Permissions.get(1).getGrantee(), assertThat(object1Permissions.get(1).getGrantee(),
is(instanceOf(Group.class))); is(instanceOf(Group.class)));
assertThat(((Group) object1Permissions.get(1).getGrantee()).getName(), assertThat(((Group) object1Permissions.get(1).getGrantee()).getName(),
is(equalTo("authors"))); is(equalTo("authors")));
assertThat(object1Permissions.get(2).getGrantedPrivilege() assertThat(object1Permissions.get(2).getGrantedPrivilege()
.getPrivilege(), .getPrivilege(),
is(equalTo("read"))); is(equalTo("read")));
assertThat(object1Permissions.get(2).getGrantee(), assertThat(object1Permissions.get(2).getGrantee(),
is(instanceOf(Group.class))); is(instanceOf(Group.class)));
@ -301,20 +327,115 @@ public class PermissionRepositoryTest {
is(equalTo("users"))); is(equalTo("users")));
final List<Permission> object2Permissions = permissionRepository final List<Permission> object2Permissions = permissionRepository
.findPermissionsForCcmObject(object2); .findPermissionsForCcmObject(object2);
assertThat(object2Permissions.size(), is(1)); assertThat(object2Permissions.size(), is(1));
assertThat(object2Permissions.get(0).getGrantedPrivilege() assertThat(object2Permissions.get(0).getGrantedPrivilege()
.getPrivilege(), .getPrivilege(),
is(equalTo("read"))); is(equalTo("read")));
assertThat(object2Permissions.get(0).getGrantee(), assertThat(object2Permissions.get(0).getGrantee(),
is(instanceOf(User.class))); is(instanceOf(User.class)));
assertThat(((User) object2Permissions.get(0).getGrantee()) assertThat(((User) object2Permissions.get(0).getGrantee())
.getScreenName(), .getScreenName(),
is(equalTo("jdoe"))); is(equalTo("jdoe")));
final List<Permission> object3Permissions = permissionRepository final List<Permission> object3Permissions = permissionRepository
.findPermissionsForCcmObject(object3); .findPermissionsForCcmObject(object3);
assertThat(object3Permissions, is(empty())); 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<Privilege> query1 = entityManager.createQuery(
"SELECT p FROM Privilege p WHERE p.privilege = 'read'",
Privilege.class);
final TypedQuery<Privilege> 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);
}
} }

View File

@ -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
}
]
}

View File

@ -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
}
]
}

View File

@ -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
}
]
}