Class DefaultGroupManager
- All Implemented Interfaces:
EventListener,Initializable,GroupManager,Authorizer,WikiEventListener
public class DefaultGroupManager extends Object implements GroupManager, Authorizer, WikiEventListener
Facade class for storing, retrieving and managing wiki groups on behalf of AuthorizationManager, JSPs and other presentation-layer
classes. GroupManager works in collaboration with a back-end GroupDatabase, which persists groups to permanent storage.
Note: prior to JSPWiki 2.4.19, GroupManager was an interface; it is now a concrete, final class. The aspects of GroupManager which previously extracted group information from storage (e.g., wiki pages) have been refactored into the GroupDatabase interface.
- Since:
- 2.4.19
-
Field Summary
Fields Modifier and Type Field Description protected Enginem_engineprotected WikiEventListenerm_groupListenerFields inherited from interface org.apache.wiki.auth.authorize.GroupManager
MESSAGES_KEY, PROP_GROUPDATABASE -
Constructor Summary
Constructors Constructor Description DefaultGroupManager() -
Method Summary
Modifier and Type Method Description voidactionPerformed(WikiEvent event)Fired when a WikiEvent is triggered by an event source.voidaddWikiEventListener(WikiEventListener listener)Registers a WikiEventListener with this instance.voidcheckGroupName(Context context, String name)Checks if a String is blank or a restricted Group name, and if it is, appends an error to the Session's message list.protected String[]extractMembers(String memberLine)Extracts carriage-return separated members into a Set of String objects.PrincipalfindRole(String name)Looks up and returns a role Principal matching a given String.GroupgetGroup(String name)Returns the Group matching a given name.GroupDatabasegetGroupDatabase()Returns the current externalGroupDatabasein use.Principal[]getRoles()Returns an array of role Principals this Authorizer knows about.voidinitialize(Engine engine, Properties props)Initializes this Engine component.booleanisUserInRole(Session session, Principal role)Determines whether the Subject associated with a WikiSession is in a particular role.GroupparseGroup(String name, String memberLine, boolean create)Extracts group name and members from passed parameters and populates an existing Group with them.voidremoveGroup(String index)Removes a named Group from the group database.voidremoveWikiEventListener(WikiEventListener listener)Un-registers a WikiEventListener with this instance.voidsetGroup(Session session, Group group)Saves theGroupcreated by a user in a wiki session.voidvalidateGroup(Context context, Group group)Validates a Group, and appends any errors to the session errors list.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.apache.wiki.auth.authorize.GroupManager
fireEvent, parseGroup
-
Field Details
-
m_engine
-
m_groupListener
-
-
Constructor Details
-
DefaultGroupManager
public DefaultGroupManager()
-
-
Method Details
-
findRole
Looks up and returns a role Principal matching a given String. If a matching role cannot be found, this method returnsnull. Note that it may not always be feasible for an Authorizer implementation to return a role Principal.- Specified by:
findRolein interfaceAuthorizer- Parameters:
name- the name of the role to retrieve- Returns:
- the role Principal
-
getGroup
Returns the Group matching a given name. If the group cannot be found, this method throws aNoSuchPrincipalException.- Specified by:
getGroupin interfaceGroupManager- Parameters:
name- the name of the group to find- Returns:
- the group
- Throws:
NoSuchPrincipalException- if the group cannot be found
-
getGroupDatabase
Returns the current externalGroupDatabasein use. This method is guaranteed to return a properly-initialized GroupDatabase, unless it could not be initialized. In that case, this method throws aWikiException. The GroupDatabase is lazily initialized.- Specified by:
getGroupDatabasein interfaceGroupManager- Returns:
- the current GroupDatabase
- Throws:
WikiSecurityException- if the GroupDatabase could not be initialized
-
getRoles
Returns an array of role Principals this Authorizer knows about. This method will always return an array; an implementing class may choose to return an zero-length array if it has no ability to identify the roles under its control.- Specified by:
getRolesin interfaceAuthorizer- Returns:
- an array of Principals representing the roles
-
initialize
Initializes this Engine component. Note that the engine is not fully initialized at this point, so don't do anything fancy here - use lazy init, if you have to.
- Specified by:
initializein interfaceAuthorizer- Specified by:
initializein interfaceInitializable- Parameters:
engine- Engine performing the initialization.props- Properties for setup.- Throws:
WikiSecurityException- if the Authorizer could not be initialized
-
isUserInRole
Determines whether the Subject associated with a WikiSession is in a particular role. This method takes two parameters: the WikiSession containing the subject and the desired role ( which may be a Role or a Group). If either parameter isnull, this method must returnfalse.- Specified by:
isUserInRolein interfaceAuthorizer- Parameters:
session- the current WikiSessionrole- the role to check- Returns:
trueif the user is considered to be in the role,falseotherwise
-
parseGroup
public Group parseGroup(String name, String memberLine, boolean create) throws WikiSecurityExceptionExtracts group name and members from passed parameters and populates an existing Group with them. The Group will either be a copy of an existing Group (if one can be found), or a new, unregistered Group (if not). Optionally, this method can throw a WikiSecurityException if the Group does not yet exist in the GroupManager cache.
The
groupparameter in the HTTP request contains the Group name to look up and populate. Themembersparameter contains the member list. If these differ from those in the existing group, the passed values override the old values.This method does not commit the new Group to the GroupManager cache. To do that, use
GroupManager.setGroup(Session, Group).- Specified by:
parseGroupin interfaceGroupManager- Parameters:
name- the name of the group to constructmemberLine- the line of text containing the group membership listcreate- whether this method should create a new, empty Group if one with the requested name is not found. Iffalse, groups that do not exist will cause aNoSuchPrincipalExceptionto be thrown- Returns:
- a new, populated group
- Throws:
WikiSecurityException- if the group name isn't allowed, or ifcreateisfalseand the Group namednamedoes not exist- See Also:
Group.RESTRICTED_GROUPNAMES
-
removeGroup
Removes a named Group from the group database. If not found, throws aNoSuchPrincipalException. After removal, this method will commit the delete to the back-end group database. It will also fire aWikiSecurityEvent.GROUP_REMOVEevent with the GroupManager instance as the source and the Group as target. Ifindexisnull, this method throws anIllegalArgumentException.- Specified by:
removeGroupin interfaceGroupManager- Parameters:
index- the group to remove- Throws:
WikiSecurityException- if the Group cannot be removed by the back-end- See Also:
GroupDatabase.delete(Group)
-
setGroup
Saves the
Groupcreated by a user in a wiki session. This method registers the Group with the GroupManager and saves it to the back-end database. If an existing Group with the same name already exists, the new group will overwrite it. After saving the Group, the group database changes are committed.This method fires the following events:
- When creating a new Group, this method fires a
WikiSecurityEvent.GROUP_ADDwith the GroupManager instance as its source and the new Group as the target. - When overwriting an existing Group, this method fires a new
WikiSecurityEvent.GROUP_REMOVEwith this GroupManager instance as the source, and the new Group as the target. It then fires aWikiSecurityEvent.GROUP_ADDevent with the same source and target.
In addition, if the save or commit actions fail, this method will attempt to restore the older version of the wiki group if it exists. This will result in a
GROUP_REMOVEevent (for the new version of the Group) followed by aGROUP_ADDevent (to indicate restoration of the old version).This method will register the new Group with the GroupManager. For example,
AuthenticationManagerattaches each Session as a GroupManager listener. Thus, the act of registering a Group withsetGroupmeans that all Sessions will automatically receive group add/change/delete events immediately.- Specified by:
setGroupin interfaceGroupManager- Parameters:
session- the wiki session, which may not benullgroup- the Group, which may not benull- Throws:
WikiSecurityException- if the Group cannot be saved by the back-end
- When creating a new Group, this method fires a
-
validateGroup
Validates a Group, and appends any errors to the session errors list. Any validation errors are added to the wiki session's messages collection (seeSession.getMessages().- Specified by:
validateGroupin interfaceGroupManager- Parameters:
context- the current wiki contextgroup- the supplied Group
-
checkGroupName
Checks if a String is blank or a restricted Group name, and if it is, appends an error to the Session's message list.- Specified by:
checkGroupNamein interfaceGroupManager- Parameters:
context- the wiki contextname- the Group name to test- Throws:
WikiSecurityException- ifsessionisnullor the Group name is illegal- See Also:
Group.RESTRICTED_GROUPNAMES
-
extractMembers
Extracts carriage-return separated members into a Set of String objects.- Parameters:
memberLine- the list of members- Returns:
- the list of members
-
addWikiEventListener
Registers a WikiEventListener with this instance. This is a convenience method.- Specified by:
addWikiEventListenerin interfaceGroupManager- Parameters:
listener- the event listener
-
removeWikiEventListener
Un-registers a WikiEventListener with this instance. This is a convenience method.- Specified by:
removeWikiEventListenerin interfaceGroupManager- Parameters:
listener- the event listener
-
actionPerformed
Fired when a WikiEvent is triggered by an event source.- Specified by:
actionPerformedin interfaceWikiEventListener- Parameters:
event- a WikiEvent object
-