This document contains changes, additions, etc. for Grouper Releases through Grouper v1.2.
Detail for releases beginning with Grouper v1.2.1 can be found in JIRA.
- UI NEW: Sorted lists of groups, stems and subjects when browsing or searching.
- UI NEW: Advanced stem search allows finer control of searching.
- UI NEW: Import and export of membership lists from / to simple delimited text files, i.e., comma or tab separated.
- UI CHANGE: Possible to configure default attributes to use for displaying groups, stems and subjects (configured by source.)
- UI CHANGE: Advanced groups search now includes ability to search by group type.
- UI CHANGE: Support display of multi-values in subject summary view. This ought to work - but so far we have not had any to play with...
- UI CHANGE: HTML forms now use the POST method.
- API NEW: added GrouperQuery support for selecting groups by their Type.
- API NEW: Operational attributes (createTime, creator) are now maintained for Memberships as they have been for Groups and Stems, in preparation for future support of aging of Memberships.
- API NEW: Stems can be renamed.
- API NEW: A prototype extension framework to ease integration of code external to the core API by defining a common build process and means of referring to the Grouper installation.
- API NEW: Updated Subject API from v0.2.1 to v0.3.0rc1-cvs to take advantage of security and performance improvements. Note that existing JDBCSourceAdapter configuration must change somewhat.
- API NEW: An experimental DAO layer has been introduced to separate business logic from persistence logic.
- API NEW: The default privilege caching TTL has been changed.
- API NEW: GrouperShell updated to v0.1.1.
- API NEW: Example code to bootstrap a wheel group ("ant eg.bootstrap").
- API BUGFIX: Operational attributes (createTime, creator) of groups whose memberships were indirectly modified are now updated.
- API BUGFIX: The build process now honors any pre-existing CLASSPATH.
- API BUGFIX: Added "membership_uuid_idx" index to "grouper_memberships" table.
- API BUGFIX: Updated "conf/ehcache.xml" to no longer overflow to disk by default.
- API BUGFIX: Fixed two severe membership calculation bugs (jira#1, jira#2).
- API BUGFIX: Fixed bugs where imported Groups and Stems were not assigned UUIDs.
- API BUGFIX: Fixed some XML escaping issues.
- API BUGFIX: API BUGFIX:"ant test" now has a proper dependency chain and can be called without having previously initialized the database.
- API BUGFIX: Added indices "grouper_groups.parent_stem" and "grouper_stems.parent_stem" to address performance issues.
- API CAVEAT: The native relational schema underlying Grouper v1.2.0 has been changed since v1.1.
- ADDED: Additional GrouperQuery filters, especially to support provisioning applications.
- IMPROVED: Configurable Privilege and Subject caching regimens.
- IMPROVED: UI support for removing many members from a group.
- ADDED: Support for XML Import/Export & custom group types & fields to the GrouperShell command line shell.
- IMPROVED: Query performance through caching.
- BUGFIX: Naming privileges not properly exported to XML.
- BUGFIX: Improper calculation of forward effective memberships to delete.
- BUGFIX: Improper setting of parent membership in select effective memberships.
- BUGFIX: Improper calculation of select child memberships to delete when deleting an immediate memberships.
- NEW: Added GrouperShell (located in `contrib/gsh`). gsh is a command-line shell that may be used in a batch or interactive manner to interact with and manipulate the Groups Registry.
- UPDATE: Updated Subject API to version 0.2.1.
- NEW: Basic integration of Gary Brown's XML export and import code.
- BUGFIX: Fixed another Hibernate lazy collection initiialization error that was brought to light by work on cdg.
- BUGFIX: Improper calculation of Membership UUIDs when deleting memberships.
- BUGFIX: `Group.delete()` did not remove composites.
- BUGFIX: `Membership.getViaGroup()` does not handle composites
- NEW: Added CompositeFinder
- NEW: Added `CompositeFinder.findAsFactor()`
- NEW: Added `CompositeFinder.findAsOwner()`
- NEW: Added `Composite.getLeftGroup()`
- NEW: Added `Composite.getOwnerGroup()`
- NEW: Added `Composite.getRightGroup()`
- NEW: Added `Composite.getType()`
- NEW: Added `MembershipFinder.findCompositeMembership(GrouperSession, Group, Subject)`
- NEW: Added `Group.getCompositeMembers()`
- NEW: Added `Group.getCompositeMemberships()`
- NEW: Added `Group.getRemovableTypes()` that will return all group types that can be removed by the current subject.
- UPDATE: `Group.getTypes()` will not return internal group types.
- NEW: Added `GroupType.delete(Session)`
- BUGFIX: The Member returned by `GrouperSession.getMembers()` would not have a GrouperSession associated with it.
- NEW: Added `Member.canCreate(Subject)`.
- NEW: Added `Member.canStem(Subject)`.
- NEW: Added `Member.canAdmin(Subject)`.
- NEW: Added `Member.canOptin(Subject)`.
- NEW: Added `Member.canOptout(Subject)`.
- NEW: Added `Member.canRead(Subject)`.
- NEW: Added `Member.canUpdate(Subject)`.
- NEW: Added `Member.canView(Subject)`.
- NEW: Error Log
- NEW: Debug Log
- NEW: Added support for composite memberships (complements, intersections, unions) to groups.
- NEW: Added `Group.canReadField(Field)`.
- NEW: Added `Group.canReadField(Subject, Field)`.
- NEW: Added `Group.canWriteField(Field)`.
- NEW: Added `Group.canWriteField(Subject, Field)`.
- UPDATE: Hibernate configuration moved to `conf/grouper.hibernate.properties`.
- NEW: Added HibernateSubject for adding I2MI Subjects to the JDBC Source Adapter table within the Groups Registry.
- BUGFIX: Several indices had gone missing in the Hibernate mapping files as a result of various configuration changes over the past months.
- NEW: With an eye towards hopefully making migrations easier in the future, we are now storing the schema version number in the database.
- NEW: StemDisplayExtensionFilter.
- NEW: StemDisplayNameFilter.
- NEW: StemExtensionFilter
- NEW: StemNameFilter
- UPDATE: Renamed StemNameFilter to StemNameAnyFilter
- NEW: `Stem.delete()` allows empty stems to be deleted.
- UPDATE: Replaced `GroupType.addField()` with `GroupType.addAttribute()` and `GroupType.addList()`.
- NEW: `SubjectFinder.findAll(query, source)` method.
- NEW: `SubjectFinder.findByIdentifier(id, type, source)` method.
- NEW: `SubjectFinder.findById(id, type, source)` method.
- NEW: `SubjectFinder.getSource(id)` method.
- NEW: `SubjectFinder.getSources(type)` method.
- NEW: `SubjectFinder.getSources()` method.
- NEW: `GroupTypeFinder.findAllAssignable()` returns all assignable group types.
- NEW: Group and Stem extend from common parent: Owner.
- UPDATE: Restore `GroupTypeFinder.findAll()` - return all public group types
- BUGFIX: Several tests that were *supposed* to be testing against the epoch were not. This was selectively causing errors while running the test harness, primarily on Windows.
- UPDDATE: Remove (outdated) schema files.
- BUGFIX: Do not allow lists to be added to themselves.
- BUGFIX: Moved GrouperSourceAdapter configuration back into `sources.xml` to fix integration with Signet.
- NEW: Delete custom fields from custom group types with the API
- NEW: Add custom fields (attributes and lists) to custom group types with the API
- NEW: Add custom group types with the API
- NEW: Cache all Hibernate queries with ehcache
- NEW: Converted all Hibernate `find()` queries into `createQuery()` queries
- BUGFIX: Clarify expected error output in test results
- BUGFIX: Eliminate Hibernate exception when renaming stems with multiple child groups
- BUGFIX: Split jdbc source initialization into separate ant task
- BUGFIX: I2MI Subject interface log4j configuration
Changes:* NEW: New public API.* NEW: New query API. This includes the ability for sites to create their own custom query filters for use within the query API.
- NEW: New access and naming adapter APIs and interfaces.
- NEW: "all" subject that can be assigned memberships and granted privileges that maps to all subjects that are identifiable by Grouper's Subject API configuration.
- NEW: Event logging
- NEW: Configuration options for controlling what privileges, if any, are granted to the "all" subject whenever a new group or stem is created. By default, READ and VIEW are granted to "all" upon group creation and no privileges are granted to "all" upon stem creation.
- NEW: Subject IDs associated with Member objects within the Groups Registry can now be changed with the Member.setSubjectId() method.
- NEW: Internal source adapter for resolving the "root" (GrouperSystem) and "all" (GrouperAll) subjects. No configuration is necessary to use this adapter within Grouper.
- NEW: Experimental wheel-group support. This is disabled by default. If enabled, all members of the group are treated as root-like subjects with all access and naming privileges.
- UPDATE: New internals.
- UPDATE: ehcache-based caches for access and naming privilege resolution.
- UPDATE: Grouper source adapter no longer needs to be configured within conf/sources.xml.
- UPDATE: License changed to Apache License, Version 2.0
- NEW: VIEW Access privilege (#339)
- NEW: READ Access privilege (#338)
- NEW: OPTIN Access privilege (#343)
- NEW: OPTOUT Access privilege (#344)
- NEW: GrouperGroup.getDisplayExtension() method
- NEW: GrouperGroup.getDisplayName() method
- NEW: GrouperGroup.getExtension() method
- NEW: GrouperGroup.getMembers() method
- NEW: GrouperGroup.getName() method
- NEW: GrouperGroup.getStem() method
- NEW: GrouperMember.getMember() method
- NEW: GrouperMember.source() method
- NEW: GrouperQuery.base() filter method
- NEW: GrouperQuery.group() filter method
- NEW: GrouperQuery.group() scoped filter method (#403)
- NEW: GrouperQuery.groupAttr() filter method
- NEW: GrouperQuery.groupAttr() scoped filter method (#403)
- NEW: GrouperQuery.stem() filter method
- NEW: GrouperQuery.stem() scoped filter method (#403)
- NEW: GrouperQuery.stemAttr() filter method
- NEW: GrouperQuery.stemAttr() scoped filter method (#403)
- NEW: GrouperQuery.getGroups() method
- NEW: GrouperQuery.getListValues() method
- NEW: GrouperQuery.getMembers() method
- NEW: GrouperQuery.getStems() method
- NEW: GrouperStem.create(session, extension) method
- NEW: GrouperStem.getDisplayExtension() method
- NEW: GrouperStem.getDisplayName() method
- NEW: GrouperStem.getExtension() method
- NEW: GrouperStem.getMembers() method
- NEW: GrouperStem.getName() method
- NEW: GrouperStem.getRootStems() method
- NEW: GrouperStem.getStem() method
- NEW: GrouperStem.load(session, extension) method
- NEW: PostgreSQL now a supported backend (#169) (Simon McLeish, London School of Economics)
- NEW: displayName is now automatically populated and maintained (#270)
- NEW: Subject and SubjectAttribute tables
- UPDATE: Grouper now uses version 0.1 draft 2 of the Subject API specification
- UPDATED: Reimplemented UPDATE Access privilege (#400)
- UPDATED: Reimplemented ADMIN Access privilege (#399)
- UPDATED: Reimplemented CREATE Naming privilege (#401)
- UPDATED: Reimplemented STEM Naming privilege (#402)
- UPDATE: Grouper.hasSubjectType() method replaced by SubjectFactory.hasType()
- UPDATE: Grouper.subjectTypes() method replaced by SubjectFactory.types()
- UPDATE: GrouperSubject class renamed to SubjectFactory
- UPDATE: grouper_attribute.groupFieldValue column size increased to 1024
- UPDATE: grouper_member table now includes a subjectSource column
- FIX: Root stems could be created with an extension containing the hierarchy delimiter.
- FIX: Stems and groups could have their extension and isplayExtension set to include the hierarchy delimiter after being created.
- FIX: whoHas() returns inaccurate results
- FIX: Error granting privileges to and revoking privileges from self (#426)
- FIX: displayName of parent stems not consulted when creating new groups and stems.
- FIX: VIEW, not READ, is needed to access a group or stem GUID. (#411)
- FIX: The subject that created a session did not have a properly initialized member object (#413)
- FIX: Privilege and effective membership pollution bug (#405)
- FIX: Default privilege implementations would attempt to revoke effective list values under select circumstances which would cause an exception to be thrown. (#361)
- FIX: hasMember() would return incorrect results when a member was both immediate and effective (#360)
- REMOVED: Stems can no longer be members or subjects
- REMOVED: GrouperQuery.query() method
- REMOVED: Grouper.subjectType() method
- REMOVED: grouper_subjectType table
- CONTRIB: cvs2subject now uses Grouper's conf/hibernate.properties for its JDBC configuration information.
- CONTRIB: csv2subject now supports additional input formats
- FIXED: Effective memberships for non-"members" lists (e.g. access and naming privileges) were being calculated incorrectly (#350)
- FIXED: Non-root subjects could not create stems or groups (#353)
- FIXED: STEM, not ADMIN, needed to modify namespace attributes (#352)
- FIXED: Added NullGrouperAttribute class (which extends GrouperAttribute) to handle group attributes that either do not have values or have had their values deleted. (#356)
- FIXED: GrouperMember.load(session, subject) replaces GrouperMember.load(subject) (#348)
- FIXED: GrouperGroup.loadByID() now returns properly casted GrouperGroup objects (#349)
- FIXED: GrouperStem.loadByID() now returns properly casted GrouperStem objects (#349)
- UPDATED: Hibernate internals completely rewritten to improve session and transaction handling
- UPDATED: New and more thoroughly tested implementation of the memberOf algorithm. In addition, we are now tracking the entire via chain for effective memberships.
- NEW: Improved Oracle compatibility and support
- NEW: Created logical distinction between groups (GrouperGroup) and namespaces (GrouperStem)
- NEW: GrouperGroup.hasMember() method for verifying whether a member belongs to a group (#328)
- NEW: GrouperMember.isMember() method for verifying whether a member belongs to a group (#328)
- NEW: GrouperStem.stems() method to retrieve immediate child namespaces within a namespace
- NEW: GrouperStem.groups() method to retrieve immediate child groups within a namespace
- NEW: GrouperSession objects now serializable (#296)
- NEW: More detailed reporting (via exceptions) of errors caused by various runtime error conditions
- NEW: Now using Commons DBCP by default for connection pooling
- NEW: Now using Hibernate named queries defined as defined in conf/Grouper.hbm.xml
- NEW: Use Ant's SQL task to to create, initialize and reset HSQLDB database (#287)
- FIXED: Removed calls to system.exit() (#179) (David Langenberg, The University Of Chicago)
- FIXED: sessionID generation bug (#278)
- FIXED: Effective membership bug with circular group memberships (#286)
- NEW: GrouperField objects now have public instance methods for getting information about the field
- FIXED: Effective membership now working with lists other than "members" as well as with the default Access and Naming privilege interfaces
- NEW: commons-dbcp 1.2.1 .jar file
- NEW: commons-pool 1.2 .jar file
- NEW: Hibernate's ODMG interface .jar
- UPDATED: Hibernate .jar from 2.1.7c to 2.1.8
- UPDATED: HSQLDB .jar from 1.7.1 to 22.214.171.124
- UPDATED: csv2group to handle comments in input files and the -c and -q options
- Databases created with Grouper 0.5 will not work with this release.\
- Runtime access to Access and Naming privilege implementations moved from Grouper to GrouperSession.
- REMOVED: GrouperSession argument requirement for most instance method calls.
- Significant via chain duplication as reuse between list values is not working.
- Via chains are not deleted when they are no longer in use.
- Logging is not especially effective or useful.
- "Base" and "Naming" group types* Immediate Memberships
- Effective Memberships
- Search: By immediate and effective membership
- Search: By group type
- Search: By group create time
- Search: By group modify time
- Access privilege interface
- Naming privilege interface
- An implementation of the access privilege interface that uses groups to manage privileges
- An implementation of the naming privilege interface that uses groups to manage privileges
- ADMIN and UPDATE access privileges
- CREATE and STEM naming privileges
- A partial implementation of the I2MI Subject interface for locally-defined people subjects
- A partial implementation of the I2MI Subject interface for groups as subjects
- Basic Event Logging
- Contributed: I2MI Subject Loader
- Contributed: Group Loader
- Contributed: Member Loader
- Contributed: Query Program
- Grouper does not fail gracefully or even necessarily informatively
- Insufficient data validation within code
- Not all database updates are atomic transactions (#233) (#248)
- Loading groups by groupID does not always fail cleanly.
- GrouperQuery objects do not properly reset their state (#255)
- Modify attributes may be be incorrect (#247)
- Session Handling is dubious at best (#173)
- Insufficient documentation
- Insufficient test coverage