jgum


Java Generic User Management



Please click here for the new JGUM site



GUM offers a framework and admin ui to manage Groups, Users, Roles, Permissions and access to resources.

Current Feature Set:
  • supports groups
  • supports users
  • supports roles
  • supports permissions and resources
  • unit tested
  • Built using Hibernate. Deployed on SQLServer, MySQL and HSQL. Supports all major databases.
  • is documented to some degree (a feature? :)
  • Web Admin Interface that won't win any awards on appearance, but works well.
    • Bulk user uploads are supported.
    • Displays users currently logged into system.
  • Can be customized to integrate with existing user admin systems (has been deployed using pre-existing User tables)

Features planned
  • Pluggable authentication.
  • LDAP support
  • Web service access

Requirements:
  • JDK1.4 tested, will probably work with JDK1.2, JDK1.3 and JDK5.0
  • Admin UI now requires Tomcat 5.x, but only because of Struts lib requirements.
  • Any relation database supported by Hibernate

Limitations:
  • Currently some data is cached in memory making the system VERY fast. However a separte process writing to the GUM tables would cause the server to get out of synch. This will be fixed in a future release toggling caching.
  • The system has not been rigorously tested for security holes. There are no known security holes but they likely exist.

GUM Administrator documentation

GUM Developer Documentation

Available from the Subversion repository via the command:
svn co http://phu008.um.us.sbphrd.com:8000/public/gum

The design of GUM was most heavily influenced by this article which provided excellent distinctions regarding groups, users, roles, permissions and resources:
http://www.javaworld.com/javaworld/jw-06-2001/jw-0615-tapestry_p.html
Note this Tapestry is very different than the project by the same name hosted at Apache.

History:
The majority of systems I've worked on have some notion of user and permission management that typically has very similar requirements. There are currently no widely available solutions to this problem.

So after implementing this solution multiple times and considering carefully how to simplify the solution in a general way I've created G.U.M. - Generic User Management.

Originally GUM was written using an XML files for persistence. This was done leveraging Castor? to marshal data to and from XML. Later requirements demanded integration with an existing SQLServer db so I converted the persistence layer using Hibernate?. Although designed with encapsulation and a pluggable persistence layer in mind I was pleasently suprised to realize that I didn't end up having to touch the core object - Group, User, Role, Permission. XML is no longer supported as a persistence layer, but all major databases are supported.