Author: snoopdave Date: Wed Aug 29 10:45:11 2007 New Revision: 570876 URL: http://svn.apache.org/viewvc?rev=570876&view=rev Log: More progress on permssions, adding support for pending permissions
Part of Externalizing User Management proposal: http://opensource.atlassian.com/projects/roller/browse/ROL-1534 Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/UserManager.java roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/ObjectPermission.java roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/ObjectPermission.orm.xml roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/WeblogPermission.orm.xml roller/branches/roller_4.1_dev/apps/weblogger/test/java/org/apache/roller/weblogger/TestUtils.java roller/branches/roller_4.1_dev/apps/weblogger/test/java/org/apache/roller/weblogger/business/PermissionTest.java Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/UserManager.java URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/UserManager.java?rev=570876&r1=570875&r2=570876&view=diff ============================================================================== --- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/UserManager.java (original) +++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/UserManager.java Wed Aug 29 10:45:11 2007 @@ -214,16 +214,31 @@ /** + * Get all of user's pending weblog permissions. + */ + public List<WeblogPermission> getWeblogPermissionsPending(User user) + throws WebloggerException; + + + /** * Get all permissions associated with a weblog. */ public List<WeblogPermission> getWeblogPermissions(Weblog weblog) throws WebloggerException; + + /** + * Get all pending permissions associated with a weblog. + */ + public List<WeblogPermission> getWeblogPermissionsPending(Weblog weblog) + throws WebloggerException; + + /** * Get user's permission within a weblog or null if none. */ public WeblogPermission getWeblogPermission(Weblog weblog, User user) - throws WebloggerException; + throws WebloggerException; //--------------------------------------------------------------- role CRUD Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java?rev=570876&r1=570875&r2=570876&view=diff ============================================================================== --- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java (original) +++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/business/jpa/JPAUserManagerImpl.java Wed Aug 29 10:45:11 2007 @@ -35,9 +35,7 @@ import java.util.List; import java.util.Map; import java.util.TreeMap; -import java.util.Collection; import java.util.Comparator; -import java.util.Set; import javax.persistence.Query; import org.apache.roller.weblogger.business.Weblogger; @@ -455,7 +453,7 @@ public WeblogPermission getWeblogPermission(Weblog weblog, User user) throws WebloggerException { - Query q = strategy.getNamedQuery("WeblogPermission.getByUserName&WeblogId"); + Query q = strategy.getNamedQuery("WeblogPermission.getByUserName&WeblogId&NotPending"); q.setParameter(1, user.getUserName()); q.setParameter(2, weblog.getHandle()); try { @@ -529,6 +527,20 @@ } + public List<WeblogPermission> getWeblogPermissionsPending(User user) throws WebloggerException { + Query q = strategy.getNamedQuery("WeblogPermission.getByUserName&Pending"); + q.setParameter(1, user.getUserName()); + return (List<WeblogPermission>)q.getResultList(); + } + + + public List<WeblogPermission> getWeblogPermissionsPending(Weblog weblog) throws WebloggerException { + Query q = strategy.getNamedQuery("WeblogPermission.getByWeblogId&Pending"); + q.setParameter(1, weblog.getHandle()); + return (List<WeblogPermission>)q.getResultList(); + } + + //-------------------------------------------------------------- role CRUD @@ -736,6 +748,7 @@ return (WeblogUserPermission)this.strategy.load( WeblogUserPermission.class, inviteId); } + } Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/ObjectPermission.java URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/ObjectPermission.java?rev=570876&r1=570875&r2=570876&view=diff ============================================================================== --- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/ObjectPermission.java (original) +++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/ObjectPermission.java Wed Aug 29 10:45:11 2007 @@ -35,12 +35,13 @@ public abstract class ObjectPermission extends RollerPermission { private static Log log = LogFactory.getLog(ObjectPermission.class); - protected String id = UUIDGenerator.generateUUID();; - protected String userName; - protected String actions; - protected String objectType; - protected String objectId; - protected Date dateCreated = new Date(); + protected String id = UUIDGenerator.generateUUID();; + protected String userName; + protected String actions; + protected String objectType; + protected String objectId; + protected boolean pending = false; + protected Date dateCreated = new Date(); public ObjectPermission() { @@ -158,6 +159,14 @@ public void setDateCreated(Date dateCreated) { this.dateCreated = dateCreated; + } + + public boolean isPending() { + return pending; + } + + public void setPending(boolean pending) { + this.pending = pending; } } Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/ObjectPermission.orm.xml URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/ObjectPermission.orm.xml?rev=570876&r1=570875&r2=570876&view=diff ============================================================================== --- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/ObjectPermission.orm.xml (original) +++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/ObjectPermission.orm.xml Wed Aug 29 10:45:11 2007 @@ -30,6 +30,9 @@ <basic name="actions"> <column name="actions"/> </basic> + <basic name="pending"> + <column name="pending"/> + </basic> <basic name="dateCreated"> <column name="datecreated"/> </basic> Modified: roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/WeblogPermission.orm.xml URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/WeblogPermission.orm.xml?rev=570876&r1=570875&r2=570876&view=diff ============================================================================== --- roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/WeblogPermission.orm.xml (original) +++ roller/branches/roller_4.1_dev/apps/weblogger/src/java/org/apache/roller/weblogger/pojos/WeblogPermission.orm.xml Wed Aug 29 10:45:11 2007 @@ -17,16 +17,29 @@ <query>SELECT p FROM WeblogPermission p</query> </named-query> - <named-query name="WeblogPermission.getByUsername"> - <query>SELECT p FROM WeblogPermission p WHERE p.userName = ?1</query> + <named-query name="WeblogPermission.getByUserName"> + <query>SELECT p FROM WeblogPermission p WHERE p.userName = ?1 AND p.pending <> TRUE</query> </named-query> <named-query name="WeblogPermission.getByWeblogId"> - <query>SELECT p FROM WeblogPermission p WHERE p.objectId = ?1</query> + <query>SELECT p FROM WeblogPermission p WHERE p.objectId = ?1 AND p.pending <> TRUE</query> </named-query> <named-query name="WeblogPermission.getByUserName&WeblogId"> <query>SELECT p FROM WeblogPermission p WHERE p.userName = ?1 AND p.objectId = ?2</query> + </named-query> + + <named-query name="WeblogPermission.getByUserName&WeblogId&NotPending"> + <query>SELECT p FROM WeblogPermission p WHERE p.userName = ?1 AND p.objectId = ?2 AND p.pending <> true</query> + </named-query> + + + <named-query name="WeblogPermission.getByUserName&Pending"> + <query>SELECT p FROM WeblogPermission p WHERE p.userName = ?1 AND p.pending = TRUE</query> + </named-query> + + <named-query name="WeblogPermission.getByWeblogId&Pending"> + <query>SELECT p FROM WeblogPermission p WHERE p.objectId = ?1 AND p.pending = true</query> </named-query> </entity> Modified: roller/branches/roller_4.1_dev/apps/weblogger/test/java/org/apache/roller/weblogger/TestUtils.java URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/test/java/org/apache/roller/weblogger/TestUtils.java?rev=570876&r1=570875&r2=570876&view=diff ============================================================================== --- roller/branches/roller_4.1_dev/apps/weblogger/test/java/org/apache/roller/weblogger/TestUtils.java (original) +++ roller/branches/roller_4.1_dev/apps/weblogger/test/java/org/apache/roller/weblogger/TestUtils.java Wed Aug 29 10:45:11 2007 @@ -46,6 +46,7 @@ import org.apache.roller.weblogger.pojos.WeblogCategory; import org.apache.roller.weblogger.pojos.WeblogEntry; import org.apache.roller.weblogger.pojos.Weblog; +import org.apache.roller.weblogger.pojos.WeblogPermission; /** * Utility class for unit test classes. @@ -217,14 +218,19 @@ /** * Convenience method for removing a permission. */ - public static void teardownPermissions(String id) throws Exception { + public static void teardownPermissions(WeblogPermission perm) throws Exception { // lookup the permissions UserManager mgr = WebloggerFactory.getWeblogger().getUserManager(); - WeblogUserPermission perm = mgr.getPermissions(id); + + // add all actions so permission object will be completely removed + perm.setActions( + WeblogPermission.ADMIN + "," + + WeblogPermission.POST + "," + + WeblogPermission.EDIT_DRAFT); // remove the permissions - mgr.removePermissions(perm); + mgr.revokeWeblogPermission(perm); // flush to db WebloggerFactory.getWeblogger().flush(); Modified: roller/branches/roller_4.1_dev/apps/weblogger/test/java/org/apache/roller/weblogger/business/PermissionTest.java URL: http://svn.apache.org/viewvc/roller/branches/roller_4.1_dev/apps/weblogger/test/java/org/apache/roller/weblogger/business/PermissionTest.java?rev=570876&r1=570875&r2=570876&view=diff ============================================================================== --- roller/branches/roller_4.1_dev/apps/weblogger/test/java/org/apache/roller/weblogger/business/PermissionTest.java (original) +++ roller/branches/roller_4.1_dev/apps/weblogger/test/java/org/apache/roller/weblogger/business/PermissionTest.java Wed Aug 29 10:45:11 2007 @@ -95,7 +95,7 @@ /** * Test basic persistence operations ... Create, Update, Delete. */ - public void testPermissionsCRUD2() throws Exception { + public void testPermissionsCRUD() throws Exception { log.info("BEGIN"); @@ -146,16 +146,17 @@ assertTrue(perm.hasAction(WeblogPermission.ADMIN)); TestUtils.endSession(true); - // revoke those same permissions, add limited permission + // revoke those same permissions mgr.revokeWeblogPermission(perm); TestUtils.endSession(true); + // add only draft permission WeblogPermission draft = new WeblogPermission(testWeblog, testUser, WeblogPermission.EDIT_DRAFT); mgr.grantWeblogPermission(draft); TestUtils.endSession(true); - // check that update was successful + // check that user has draft permisson only testWeblog = TestUtils.getManagedWebsite(testWeblog); testUser = TestUtils.getManagedUser(testUser); perm = null; @@ -166,137 +167,73 @@ assertFalse(perm.hasAction(WeblogPermission.ADMIN)); log.info("END"); - } + } + /** - * Test basic persistence operations ... Create, Update, Delete. + * Test lookup mechanisms. */ - public void _testPermissionsCRUD() throws Exception { + public void testPermissionsLookups() throws Exception { log.info("BEGIN"); - UserManager mgr = WebloggerFactory.getWeblogger().getUserManager(); - WeblogUserPermission perm = null; - - // delete permissions - testWeblog = TestUtils.getManagedWebsite(testWeblog); - testUser = TestUtils.getManagedUser(testUser); - perm = mgr.getPermissions(testWeblog, testUser); - assertNotNull(perm); - mgr.removePermissions(perm); + // we need a second user for this test + User user = TestUtils.setupUser("testPermissionsLookups"); TestUtils.endSession(true); - - // check that delete was successful - perm = null; - testWeblog = TestUtils.getManagedWebsite(testWeblog); - testUser = TestUtils.getManagedUser(testUser); - perm = mgr.getPermissions(testWeblog, testUser); - assertNull(perm); - - // create permissions - perm = new WeblogUserPermission(); - perm.setUser(testUser); - perm.setWebsite(testWeblog); - perm.setPending(false); - perm.setPermissionMask(WeblogUserPermission.ADMIN); - mgr.savePermissions(perm); + + UserManager mgr = WebloggerFactory.getWeblogger().getUserManager(); + WeblogPermission perm = null; + List<WeblogPermission> perms = null; + + // get all permissions for a user + perms = mgr.getWeblogPermissions(TestUtils.getManagedUser(user)); + assertEquals(0, perms.size()); + perms = mgr.getWeblogPermissions(TestUtils.getManagedUser(testUser)); + assertEquals(1, perms.size()); + + // get all permissions for a weblog + perms = mgr.getWeblogPermissions(TestUtils.getManagedWebsite(testWeblog)); + assertEquals(1, perms.size()); + + perm = new WeblogPermission( + TestUtils.getManagedWebsite(testWeblog), + TestUtils.getManagedUser(user), + WeblogPermission.POST); + perm.setPending(true); + mgr.grantWeblogPermission(perm); TestUtils.endSession(true); - - // check that create was successful - testWeblog = TestUtils.getManagedWebsite(testWeblog); - testUser = TestUtils.getManagedUser(testUser); + + // get pending permissions for a user + perms = mgr.getWeblogPermissionsPending(TestUtils.getManagedUser(testUser)); + assertEquals(0, perms.size()); + perms = mgr.getWeblogPermissionsPending(TestUtils.getManagedUser(user)); + assertEquals(1, perms.size()); + + // get pending permissions for a weblog + perms = mgr.getWeblogPermissionsPending(TestUtils.getManagedWebsite(testWeblog)); + assertEquals(1, perms.size()); + + // get permissions for a specific user/weblog perm = null; - perm = mgr.getPermissions(testWeblog, testUser); + perm = mgr.getWeblogPermission( + TestUtils.getManagedWebsite(testWeblog), + TestUtils.getManagedUser(testUser)); assertNotNull(perm); - assertEquals(WeblogUserPermission.ADMIN, perm.getPermissionMask()); - - // update permissions - perm.setPermissionMask(WeblogUserPermission.LIMITED); - mgr.savePermissions(perm); - TestUtils.endSession(true); + assertTrue(perm.hasAction(WeblogPermission.ADMIN)); - // check that update was successful - testWeblog = TestUtils.getManagedWebsite(testWeblog); - testUser = TestUtils.getManagedUser(testUser); + // pending permissions should not be visible perm = null; - perm = mgr.getPermissions(testWeblog, testUser); - assertNotNull(perm); - assertEquals(WeblogUserPermission.LIMITED, perm.getPermissionMask()); - - log.info("END"); - } - - - /** - * Test lookup mechanisms. - */ - public void _testPermissionsLookups() throws Exception { - - log.info("BEGIN"); + perm = mgr.getWeblogPermission( + TestUtils.getManagedWebsite(testWeblog), + TestUtils.getManagedUser(user)); + assertNull(perm); - try { - // we need a second user for this test - User user = TestUtils.setupUser("testPermissionsLookups"); - TestUtils.endSession(true); - - UserManager mgr = WebloggerFactory.getWeblogger().getUserManager(); - WeblogUserPermission perm = null; - List perms = null; - - // get all permissions for a user - perms = mgr.getAllPermissions(TestUtils.getManagedUser(user)); - assertEquals(0, perms.size()); - perms = mgr.getAllPermissions(TestUtils.getManagedUser(testUser)); - assertEquals(1, perms.size()); - - // get all permissions for a weblog - perms = mgr.getAllPermissions(TestUtils.getManagedWebsite(testWeblog)); - assertEquals(1, perms.size()); - - perm = new WeblogUserPermission(); - perm.setUser(TestUtils.getManagedUser(user)); - perm.setWebsite(TestUtils.getManagedWebsite(testWeblog)); - perm.setPending(true); - perm.setPermissionMask(WeblogUserPermission.AUTHOR); - mgr.savePermissions(perm); - TestUtils.endSession(true); - - // get pending permissions for a user - perms = mgr.getPendingPermissions(TestUtils.getManagedUser(testUser)); - assertEquals(0, perms.size()); - perms = mgr.getPendingPermissions(TestUtils.getManagedUser(user)); - assertEquals(1, perms.size()); - - // get pending permissions for a weblog - perms = mgr.getPendingPermissions(TestUtils.getManagedWebsite(testWeblog)); - assertEquals(1, perms.size()); - - // get permissions by id - String id = perm.getId(); - perm = null; - perm = mgr.getPermissions(id); - assertNotNull(perm); - assertEquals(id, perm.getId()); - - // get permissions for a specific user/weblog - perm = null; - perm = mgr.getPermissions(TestUtils.getManagedWebsite(testWeblog), TestUtils.getManagedUser(testUser)); - assertNotNull(perm); - assertEquals(WeblogUserPermission.ADMIN, perm.getPermissionMask()); - perm = null; - perm = mgr.getPermissions(TestUtils.getManagedWebsite(testWeblog), TestUtils.getManagedUser(user)); - assertNotNull(perm); - assertEquals(WeblogUserPermission.AUTHOR, perm.getPermissionMask()); - assertEquals(true, perm.isPending()); - - // cleanup - TestUtils.teardownPermissions(perm.getId()); - TestUtils.teardownUser(user.getId()); - TestUtils.endSession(true); - } catch(Throwable t) { - log.error("Error running test", t); - throw (Exception) t; - } + List<WeblogPermission> pendings = mgr.getWeblogPermissionsPending(user); + + // cleanup + TestUtils.teardownPermissions(pendings.get(0)); + TestUtils.teardownUser(user.getId()); + TestUtils.endSession(true); log.info("END"); }
