Package =TWiki::UserMappingThis is a virtual base class (a.k.a an interface) for all user mappers. It is not useable as a mapping in TWiki - use the BaseUserMapping for default behaviour. User mapping is the process by which TWiki maps from a username (a login name) to a display name and back. It is also where groups are maintained. See TWiki::Users::BaseUserMapping and TWiki::Users::TWikiUserMapping for the default implementations of this interface. If you want to write a user mapper, you will need to implement the methods described in this class. User mappings work by mapping both login names and display names to a canonical user id. This user id is composed from a prefix that defines the mapper in use (something like 'BaseUserMapping_' or 'LdapUserMapping_') and a unique user id that the mapper uses to identify the user. The null prefix is reserver for the TWikiUserMapping for compatibility with old TWiki releases. Note: in all the following documentation,$cUID refers to a
canonical user id.
On this page:
PROTECTED ClassMethod new ($session, $mapping_id)Construct a user mapping object, using the given mapping id.ObjectMethod finish ()Break circular references.ObjectMethod *loginTemplateName () -> $templateFileAllows UserMappings to come with customised login screens - that should preferably only over-ride the UI function Default is "login"ObjectMethod *supportsRegistration () -> $booleanReturn true if the UserMapper supports registration (ie can create new users) Default is falseObjectMethod handlesUser ($cUID,$login,$wikiname) -> $booleanCalled by the TWiki::Users object to determine which loaded mapping to use for a given user (must be fast). The user can be identified by any of $cUID, $login or $wikiname. Any of these parameters may be undef, and they should be tested in order; cUID first, then login, then wikiname.ObjectMethod login2cUID ($login,$dontcheck) -> cUIDConvert a login name to the corresponding canonical user name. The canonical name can be any string of 7-bit alphanumeric and underscore characters, and must map 1:1 to the login name. (undef on failure) (if $dontcheck is true, return a cUID for a nonexistant user too. This is used for registration) Subclasses must implement this method. Note: This method was previously (in TWiki 4.2.0) known as getCanonicalUserID. The name was changed to avoid confusion with TWiki::Users::getCanonicalUserID, which has a more generic function. However to support older user mappers, getCanonicalUserID will still be called if login2cUID is not defined.ObjectMethod getLoginName ($cUID) -> loginConverts an internal cUID to that user's login (undef on failure) Subclasses must implement this method. | ||||||||
Changed: | ||||||||
< < | ObjectMethod addUser ($login,$wikiname,$password,$emails) -> $cUID | |||||||
> > | ObjectMethod addUser ($login,$wikiname,$password,$emails,$mcp) -> $cUID | |||||||
Add a user to the persistant mapping that maps from usernames to wikinames
and vice-versa.
$login and $wikiname must be acceptable to $TWiki::cfg{NameFilter}.
$login must always be specified. $wikiname may be undef, in which case
the user mapper should make one up.
This function must return a canonical user id that it uses to uniquely
identify the user. This can be the login name, or the wikiname if they
are all guaranteed unigue, or some other string consisting only of 7-bit
alphanumerics and underscores.
If you fail to create a new user (for eg your Mapper has read only access),
throw Error::Simple('Failed to add user: '.$error);where $error is a descriptive string. Throws an Error::Simple if user adding is not supported (the default). ObjectMethod removeUser ($cUID) -> $booleanDelete the users entry from this mapper. Throws an Error::Simple if user removal is not supported (the default).ObjectMethod getWikiName ($cUID) -> $wikinameMap a canonical user name to a wikiname. Returns the $cUID by default.ObjectMethod userExists ($cUID) -> $booleanDetermine if the user already exists or not. Whether a user exists or not is determined by the password manager. Subclasses must implement this method.ObjectMethod eachUser () -> TWiki::ListIteratorofcUIDsGet an iterator over the list of all the registered users not including groups. Subclasses must implement this method.ObjectMethod *eachGroupMember ($group) -> TWiki::ListIteratorofcUIDsReturn a iterator over the canonical user ids of users that are members of this group. Should only be called on groups. Note that groups may be defined recursively, so a group may contain other groups. This method should only return users i.e. all contained groups should be fully expanded. Subclasses must implement this method.ObjectMethod isGroup ($name) -> booleanEstablish if a user refers to a group or not. If $name is not a group name it will probably be a canonical user id, though that should not be assumed. Subclasses must implement this method.ObjectMethod eachGroup () -> TWiki::ListIteratorofgroupnamesGet an iterator over the list of all the groups. Subclasses must implement this method.ObjectMethod eachMembership ($cUID) -> TWiki::ListIteratorofgroupsthisuserisinReturn an iterator over the names of groups that $cUID is a member of. Subclasses must implement this method.ObjectMethod isAdmin ($cUID) -> $booleanTrue if the user is an administrator.ObjectMethod isInGroup ($cUID,$group) -> $boolTest if the user identified by $cUID is in the given group. The default implementation iterates over all the members of $group, which is rather inefficient.ObjectMethod *findUserByEmail ($email) -> \@users
ObjectMethod getEmails ($name) -> @emailAddressIf $name is a cUID, return that user's email addresses. If it is a group, return the addresses of everyone in the group. Duplicates should be removed from the list.ObjectMethod setEmails ($cUID,@emails)Set the email address(es) for the given user. | ||||||||
Added: | ||||||||
> > |
ObjectMethod *getMustChangePassword ($cUID) -> $flagReturns 1 if the $cUID must change the password, else 0. Returns undef if $cUID not found.ObjectMethod getUserData ($cUID) -> $dataRefReturn a reference to an array of hashes with user data, used to manage users. Each item is a hash with:
ObjectMethod setUserData ($cUID,$dataRef)Set the user data of a user. Same array of hashes as getUserData is assumed, although only{name} and {value} are used. | |||||||
ObjectMethod *findUserByWikiName ($wikiname) -> listofcUIDsassociatedwiththatwikiname
ObjectMethod checkPassword ($login,$passwordU) -> $booleanFinds if the password is valid for the given login. This is called using a login name rather than a cUID because the user may not have been mapped at the time it is called. Returns 1 on success, undef on failure. Default behaviour is to return 1.ObjectMethod setPassword ($cUID,$newPassU,$oldPassU) -> $booleanIf the $oldPassU matches matches the user's password, then it will replace it with $newPassU. If $oldPassU is not correct and not 1, will return 0. If $oldPassU is 1, will force the change irrespective of the existing password, adding the user if necessary. Otherwise returns 1 on success, undef on failure. Default behaviour is to fail.ObjectMethod passwordError () -> $stringReturns a string indicating the error that happened in the password handlers TODO: these delayed errors should be replaced with Exceptions. returns undef if no error (the default) |
Package =TWiki::UserMappingThis is a virtual base class (a.k.a an interface) for all user mappers. It is not useable as a mapping in TWiki - use the BaseUserMapping for default behaviour. User mapping is the process by which TWiki maps from a username (a login name) to a display name and back. It is also where groups are maintained. See TWiki::Users::BaseUserMapping and TWiki::Users::TWikiUserMapping for the default implementations of this interface. If you want to write a user mapper, you will need to implement the methods described in this class. User mappings work by mapping both login names and display names to a canonical user id. This user id is composed from a prefix that defines the mapper in use (something like 'BaseUserMapping_' or 'LdapUserMapping_') and a unique user id that the mapper uses to identify the user. The null prefix is reserver for the TWikiUserMapping for compatibility with old TWiki releases. | ||||||||
Changed: | ||||||||
< < | Note: in all the following documentation, $user refers to a | |||||||
> > | Note: in all the following documentation, $cUID refers to a | |||||||
canonical user id.
On this page:
PROTECTED ClassMethod new ($session, $mapping_id)Construct a user mapping object, using the given mapping id.ObjectMethod finish ()Break circular references.ObjectMethod *loginTemplateName () -> $templateFileAllows UserMappings to come with customised login screens - that should preferably only over-ride the UI function Default is "login"ObjectMethod *supportsRegistration () -> $booleanReturn true if the UserMapper supports registration (ie can create new users) Default is falseObjectMethod handlesUser ($cUID,$login,$wikiname) -> $booleanCalled by the TWiki::Users object to determine which loaded mapping to use for a given user (must be fast). | ||||||||
Changed: | ||||||||
< < | Default is false | |||||||
> > | The user can be identified by any of $cUID, $login or $wikiname. Any of | |||||||
Added: | ||||||||
> > | these parameters may be undef, and they should be tested in order; cUID first, then login, then wikiname. | |||||||
Changed: | ||||||||
< < | ObjectMethod *getCanonicalUserID ($login,$dontcheck) -> cUID | |||||||
> > | ObjectMethod login2cUID ($login,$dontcheck) -> cUID | |||||||
Convert a login name to the corresponding canonical user name. The canonical name can be any string of 7-bit alphanumeric and underscore | ||||||||
Changed: | ||||||||
< < | characters, and must correspond 1:1 to the login name. | |||||||
> > | characters, and must map 1:1 to the login name. | |||||||
(undef on failure) | ||||||||
Changed: | ||||||||
< < | (if dontcheck is true, return a cUID for a nonexistant user too - used for registration) | |||||||
> > | (if $dontcheck is true, return a cUID for a nonexistant user too. | |||||||
Added: | ||||||||
> > | This is used for registration) | |||||||
Subclasses must implement this method. | ||||||||
Added: | ||||||||
> > | Note: This method was previously (in TWiki 4.2.0) known as getCanonicalUserID. The name was changed to avoid confusion with TWiki::Users::getCanonicalUserID, which has a more generic function. However to support older user mappers, getCanonicalUserID will still be called if login2cUID is not defined. | |||||||
ObjectMethod getLoginName ($cUID) -> loginConverts an internal cUID to that user's login (undef on failure) Subclasses must implement this method. | ||||||||
Changed: | ||||||||
< < | ObjectMethod addUser ($login,$wikiname,$password,$emails) -> cUID | |||||||
> > | ObjectMethod addUser ($login,$wikiname,$password,$emails) -> $cUID | |||||||
Add a user to the persistant mapping that maps from usernames to wikinames | ||||||||
Changed: | ||||||||
< < | and vice-versa, via a canonical user id (cUID). | |||||||
> > | and vice-versa. | |||||||
$login and $wikiname must be acceptable to $TWiki::cfg{NameFilter}.
$login must always be specified. $wikiname may be undef, in which case
the user mapper should make one up.
This function must return a canonical user id that it uses to uniquely
identify the user. This can be the login name, or the wikiname if they
are all guaranteed unigue, or some other string consisting only of 7-bit
alphanumerics and underscores.
If you fail to create a new user (for eg your Mapper has read only access),
throw Error::Simple('Failed to add user: '.$error);where $error is a descriptive string. Throws an Error::Simple if user adding is not supported (the default). | ||||||||
Changed: | ||||||||
< < | ObjectMethod removeUser ($user) -> $boolean | |||||||
> > | ObjectMethod removeUser ($cUID) -> $boolean | |||||||
Delete the users entry from this mapper. Throws an Error::Simple if user removal is not supported (the default). | ||||||||
Changed: | ||||||||
< < | ObjectMethod getWikiName ($cUID) -> wikiname | |||||||
> > | ObjectMethod getWikiName ($cUID) -> $wikiname | |||||||
Map a canonical user name to a wikiname.
Returns the $cUID by default.
ObjectMethod userExists ($cUID) -> $booleanDetermine if the user already exists or not. Whether a user exists or not is determined by the password manager. Subclasses must implement this method. | ||||||||
Changed: | ||||||||
< < | ObjectMethod eachUser () -> listIteratorofcUIDs | |||||||
> > | ObjectMethod eachUser () -> TWiki::ListIteratorofcUIDs | |||||||
Changed: | ||||||||
< < | Called from TWiki::Users. See the documentation of the corresponding method in that module for details. | |||||||
> > | Get an iterator over the list of all the registered users not including groups. | |||||||
Subclasses must implement this method.
ObjectMethod *eachGroupMember ($group) -> TWiki::ListIteratorofcUIDs | ||||||||
Changed: | ||||||||
< < | Called from TWiki::Users. See the documentation of the corresponding method in that module for details. | |||||||
> > | Return a iterator over the canonical user ids of users that are members of this group. Should only be called on groups. | |||||||
Added: | ||||||||
> > | Note that groups may be defined recursively, so a group may contain other groups. This method should only return users i.e. all contained groups should be fully expanded. | |||||||
Subclasses must implement this method. | ||||||||
Changed: | ||||||||
< < | ObjectMethod isGroup ($user) -> boolean | |||||||
> > | ObjectMethod isGroup ($name) -> boolean | |||||||
Changed: | ||||||||
< < | Called from TWiki::Users. See the documentation of the corresponding method in that module for details. | |||||||
> > | Establish if a user refers to a group or not. If $name is not a group name it will probably be a canonical user id, though that | |||||||
Added: | ||||||||
> > | should not be assumed. | |||||||
Subclasses must implement this method. | ||||||||
Changed: | ||||||||
< < | ObjectMethod eachGroup () -> ListIteratorofgroupnames | |||||||
> > | ObjectMethod eachGroup () -> TWiki::ListIteratorofgroupnames | |||||||
Changed: | ||||||||
< < | Called from TWiki::Users. See the documentation of the corresponding | |||||||
> > | Get an iterator over the list of all the groups. | |||||||
Deleted: | ||||||||
< < | method in that module for details. | |||||||
Subclasses must implement this method. | ||||||||
Changed: | ||||||||
< < | ObjectMethod eachMembership ($cUID) -> ListIteratorofgroupsthisuserisin | |||||||
> > | ObjectMethod eachMembership ($cUID) -> TWiki::ListIteratorofgroupsthisuserisin | |||||||
Changed: | ||||||||
< < | Called from TWiki::Users. See the documentation of the corresponding | |||||||
> > | Return an iterator over the names of groups that $cUID is a member of. | |||||||
Deleted: | ||||||||
< < | method in that module for details. | |||||||
Subclasses must implement this method. | ||||||||
Changed: | ||||||||
< < | ObjectMethod isAdmin ($user) -> $boolean | |||||||
> > | ObjectMethod isAdmin ($cUID) -> $boolean | |||||||
Changed: | ||||||||
< < | True if the user is an administrator. Default is false | |||||||
> > | True if the user is an administrator. | |||||||
Changed: | ||||||||
< < | ObjectMethod isInGroup ($user,$group,$scanning) -> bool | |||||||
> > | ObjectMethod isInGroup ($cUID,$group) -> $bool | |||||||
Changed: | ||||||||
< < | Called from TWiki::Users. See the documentation of the corresponding method in that module for details. | |||||||
> > | Test if the user identified by $cUID is in the given group. The default implementation iterates over all the members of $group, which is rather | |||||||
Added: | ||||||||
> > | inefficient. | |||||||
Deleted: | ||||||||
< < | Default is false | |||||||
Deleted: | ||||||||
< < | ||||||||
ObjectMethod *findUserByEmail ($email) -> \@users
| ||||||||
Deleted: | ||||||||
< < | Returns an empty list by default. | |||||||
Added: | ||||||||
> > | ObjectMethod getEmails ($name) -> @emailAddress | |||||||
Changed: | ||||||||
< < | ObjectMethod getEmails ($user) -> @emailAddress | |||||||
> > | If $name is a cUID, return that user's email addresses. If it is a group, | |||||||
Deleted: | ||||||||
< < | If this is a user, return their email addresses. If it is a group, | |||||||
return the addresses of everyone in the group. Duplicates should be removed from the list. | ||||||||
Deleted: | ||||||||
< < | By default, returns the empty list. | |||||||
Added: | ||||||||
> > | ObjectMethod setEmails ($cUID,@emails) | |||||||
Changed: | ||||||||
< < | ObjectMethod setEmails ($user,@emails) | |||||||
> > | Set the email address(es) for the given user. | |||||||
Deleted: | ||||||||
< < | Set the email address(es) for the given user. Does nothing by default. | |||||||
Deleted: | ||||||||
< < | ||||||||
ObjectMethod *findUserByWikiName ($wikiname) -> listofcUIDsassociatedwiththatwikiname | ||||||||
Added: | ||||||||
> > |
| |||||||
Changed: | ||||||||
< < | Called from TWiki::Users. See the documentation of the corresponding method in that module for details. | |||||||
> > | Note that if $wikiname is the name of a group, the group will not be expanded. | |||||||
Subclasses must implement this method. | ||||||||
Changed: | ||||||||
< < | ObjectMethod checkPassword ($userName,$passwordU) -> $boolean | |||||||
> > | ObjectMethod checkPassword ($login,$passwordU) -> $boolean | |||||||
Changed: | ||||||||
< < | Finds if the password is valid for the given user. | |||||||
> > | Finds if the password is valid for the given login. This is called using | |||||||
Added: | ||||||||
> > | a login name rather than a cUID because the user may not have been mapped at the time it is called. | |||||||
Returns 1 on success, undef on failure. Default behaviour is to return 1. | ||||||||
Changed: | ||||||||
< < | ObjectMethod setPassword ($user,$newPassU,$oldPassU) -> $boolean | |||||||
> > | ObjectMethod setPassword ($cUID,$newPassU,$oldPassU) -> $boolean | |||||||
If the $oldPassU matches matches the user's password, then it will
replace it with $newPassU.
If $oldPassU is not correct and not 1, will return 0.
If $oldPassU is 1, will force the change irrespective of
the existing password, adding the user if necessary.
Otherwise returns 1 on success, undef on failure.
Default behaviour is to fail.
ObjectMethod passwordError () -> $stringReturns a string indicating the error that happened in the password handlers TODO: these delayed errors should be replaced with Exceptions. | ||||||||
Changed: | ||||||||
< < | returns undef if no error 9the default) | |||||||
> > | returns undef if no error (the default) | |||||||
Deleted: | ||||||||
< < |
ObjectMethod *ASSERT_IS_CANONICAL_USER_ID ($user_id) -> $booleanUsed for debugging to ensure we are actually passing a canonical_idObjectMethod *ASSERT_IS_USER_LOGIN_ID ($user_login) -> $booleanUsed for debugging to ensure we are actually passing a user loginObjectMethod *ASSERT_IS_USER_DISPLAY_NAME ($user_display) -> $booleanUsed for debugging to ensure we are actually passing a user display_name (commonly a WikiWord Name) Returns true by default. | |||||||
Package =TWiki::UserMappingThis is a virtual base class (a.k.a an interface) for all user mappers. It is not useable as a mapping in TWiki - use the BaseUserMapping for default behaviour. User mapping is the process by which TWiki maps from a username (a login name) to a display name and back. It is also where groups are maintained. See TWiki::Users::BaseUserMapping and TWiki::Users::TWikiUserMapping for the default implementations of this interface. If you want to write a user mapper, you will need to implement the methods described in this class. User mappings work by mapping both login names and display names to a canonical user id. This user id is composed from a prefix that defines the mapper in use (something like 'BaseUserMapping_' or 'LdapUserMapping_') and a unique user id that the mapper uses to identify the user. The null prefix is reserver for the TWikiUserMapping for compatibility with old TWiki releases. Note: in all the following documentation,$user refers to a
canonical user id.
On this page:
PROTECTED ClassMethod new ($session, $mapping_id)Construct a user mapping object, using the given mapping id.ObjectMethod finish ()Break circular references.ObjectMethod *loginTemplateName () -> $templateFileAllows UserMappings to come with customised login screens - that should preferably only over-ride the UI function Default is "login"ObjectMethod *supportsRegistration () -> $booleanReturn true if the UserMapper supports registration (ie can create new users) Default is falseObjectMethod handlesUser ($cUID,$login,$wikiname) -> $booleanCalled by the TWiki::Users object to determine which loaded mapping to use for a given user (must be fast). Default is falseObjectMethod *getCanonicalUserID ($login,$dontcheck) -> cUIDConvert a login name to the corresponding canonical user name. The canonical name can be any string of 7-bit alphanumeric and underscore characters, and must correspond 1:1 to the login name. (undef on failure) (if dontcheck is true, return a cUID for a nonexistant user too - used for registration) Subclasses must implement this method.ObjectMethod getLoginName ($cUID) -> loginConverts an internal cUID to that user's login (undef on failure) Subclasses must implement this method.ObjectMethod addUser ($login,$wikiname,$password,$emails) -> cUIDAdd a user to the persistant mapping that maps from usernames to wikinames and vice-versa, via a canonical user id (cUID). $login and $wikiname must be acceptable to $TWiki::cfg{NameFilter}. $login must always be specified. $wikiname may be undef, in which case the user mapper should make one up. This function must return a canonical user id that it uses to uniquely identify the user. This can be the login name, or the wikiname if they are all guaranteed unigue, or some other string consisting only of 7-bit alphanumerics and underscores. If you fail to create a new user (for eg your Mapper has read only access),throw Error::Simple('Failed to add user: '.$error);where $error is a descriptive string. Throws an Error::Simple if user adding is not supported (the default). ObjectMethod removeUser ($user) -> $booleanDelete the users entry from this mapper. Throws an Error::Simple if user removal is not supported (the default).ObjectMethod getWikiName ($cUID) -> wikinameMap a canonical user name to a wikiname. Returns the $cUID by default.ObjectMethod userExists ($cUID) -> $booleanDetermine if the user already exists or not. Whether a user exists or not is determined by the password manager. Subclasses must implement this method.ObjectMethod eachUser () -> listIteratorofcUIDsCalled from TWiki::Users. See the documentation of the corresponding method in that module for details. Subclasses must implement this method.ObjectMethod *eachGroupMember ($group) -> TWiki::ListIteratorofcUIDsCalled from TWiki::Users. See the documentation of the corresponding method in that module for details. Subclasses must implement this method.ObjectMethod isGroup ($user) -> booleanCalled from TWiki::Users. See the documentation of the corresponding method in that module for details. Subclasses must implement this method.ObjectMethod eachGroup () -> ListIteratorofgroupnamesCalled from TWiki::Users. See the documentation of the corresponding method in that module for details. Subclasses must implement this method.ObjectMethod eachMembership ($cUID) -> ListIteratorofgroupsthisuserisinCalled from TWiki::Users. See the documentation of the corresponding method in that module for details. Subclasses must implement this method.ObjectMethod isAdmin ($user) -> $booleanTrue if the user is an administrator. Default is falseObjectMethod isInGroup ($user,$group,$scanning) -> boolCalled from TWiki::Users. See the documentation of the corresponding method in that module for details. Default is falseObjectMethod *findUserByEmail ($email) -> \@users
ObjectMethod getEmails ($user) -> @emailAddressIf this is a user, return their email addresses. If it is a group, return the addresses of everyone in the group. Duplicates should be removed from the list. By default, returns the empty list.ObjectMethod setEmails ($user,@emails)Set the email address(es) for the given user. Does nothing by default.ObjectMethod *findUserByWikiName ($wikiname) -> listofcUIDsassociatedwiththatwikinameCalled from TWiki::Users. See the documentation of the corresponding method in that module for details. Subclasses must implement this method.ObjectMethod checkPassword ($userName,$passwordU) -> $booleanFinds if the password is valid for the given user. Returns 1 on success, undef on failure. Default behaviour is to return 1.ObjectMethod setPassword ($user,$newPassU,$oldPassU) -> $booleanIf the $oldPassU matches matches the user's password, then it will replace it with $newPassU. If $oldPassU is not correct and not 1, will return 0. If $oldPassU is 1, will force the change irrespective of the existing password, adding the user if necessary. Otherwise returns 1 on success, undef on failure. Default behaviour is to fail.ObjectMethod passwordError () -> $stringReturns a string indicating the error that happened in the password handlers TODO: these delayed errors should be replaced with Exceptions. returns undef if no error 9the default)ObjectMethod *ASSERT_IS_CANONICAL_USER_ID ($user_id) -> $booleanUsed for debugging to ensure we are actually passing a canonical_idObjectMethod *ASSERT_IS_USER_LOGIN_ID ($user_login) -> $booleanUsed for debugging to ensure we are actually passing a user loginObjectMethod *ASSERT_IS_USER_DISPLAY_NAME ($user_display) -> $booleanUsed for debugging to ensure we are actually passing a user display_name (commonly a WikiWord Name) Returns true by default. |