Class PersonServiceImpl
java.lang.Object
org.alfresco.repo.transaction.TransactionListenerAdapter
org.alfresco.repo.security.person.PersonServiceImpl
- All Implemented Interfaces:
NodeServicePolicies.BeforeCreateNodePolicy,NodeServicePolicies.BeforeDeleteNodePolicy,NodeServicePolicies.OnCreateNodePolicy,NodeServicePolicies.OnUpdatePropertiesPolicy,ClassPolicy,Policy,TransactionListener,PersonService,org.alfresco.util.transaction.TransactionListener
public class PersonServiceImpl
extends TransactionListenerAdapter
implements PersonService, NodeServicePolicies.BeforeCreateNodePolicy, NodeServicePolicies.OnCreateNodePolicy, NodeServicePolicies.BeforeDeleteNodePolicy, NodeServicePolicies.OnUpdatePropertiesPolicy
-
Nested Class Summary
Nested ClassesNested classes/interfaces inherited from interface org.alfresco.service.cmr.security.PersonService
PersonService.PersonInfoNested classes/interfaces inherited from interface org.alfresco.repo.policy.Policy
Policy.Arg -
Field Summary
FieldsFields inherited from interface org.alfresco.repo.node.NodeServicePolicies.BeforeCreateNodePolicy
QNAMEFields inherited from interface org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy
QNAMEFields inherited from interface org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy
QNAMEFields inherited from interface org.alfresco.repo.node.NodeServicePolicies.OnUpdatePropertiesPolicy
ARG_0, ARG_1, ARG_2, QNAME -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoidProcess clean up any duplicates that were flagged during the transaction.voidbeforeCreateNode(NodeRef parentRef, QName assocTypeQName, QName assocQName, QName nodeTypeQName) Called before a new node is created.voidbeforeCreateNodeValidation(NodeRef parentRef, QName assocTypeQName, QName assocQName, QName nodeTypeQName) voidbeforeDeleteNode(NodeRef nodeRef) Called before a node is deleted.voidbeforeDeleteNodeValidation(NodeRef nodeRef) intCounts the number of persons registered with the system.booleanDoes this service create people on demand if they are missing.createPerson(Map<QName, Serializable> properties) Create a new person with the given properties.createPerson(Map<QName, Serializable> properties, Set<String> zones) Create a new person with the given properties, recording them against the given zone name (usually identifying an external user registry from which the details were obtained).voiddeletePerson(String userName) Delete the person identified by the given user name.voiddeletePerson(NodeRef personRef) Delete the person identified by the given ref.voiddeletePerson(NodeRef personRef, boolean deleteAuthentication) Delete the person identified by the given ref, and optionally delete the associated authentication, if one.booleanDeprecated.see getPeopleGet the list of properties that are mutable.org.alfresco.query.PagingResults<PersonService.PersonInfo>getPeople(String pattern, List<QName> filterStringProps, List<Pair<QName, Boolean>> sortProps, org.alfresco.query.PagingRequest pagingRequest) Get paged list of people optionally filtered and/or sorted Note: the pattern is applied to filter props (0 to 3) as startsWithIgnoreCase, which are OR'ed together, for example: cm:userName or cm:firstName or cm:lastNameorg.alfresco.query.PagingResults<PersonService.PersonInfo>getPeople(String pattern, List<QName> filterStringProps, Set<QName> inclusiveAspects, Set<QName> exclusiveAspects, boolean includeAdministraotrs, List<Pair<QName, Boolean>> sortProps, org.alfresco.query.PagingRequest pagingRequest) Get paged list of people optionally filtered and/or sortedorg.alfresco.query.PagingResults<PersonService.PersonInfo>getPeople(List<Pair<QName, String>> stringPropFilters, boolean filterIgnoreCase, List<Pair<QName, Boolean>> sortProps, org.alfresco.query.PagingRequest pagingRequest) Deprecated.see getPeople(String pattern, ListfilterProps, List<Pair<QName, Boolean>> sortProps, PagingRequest pagingRequest) Return the container that stores people.getPeopleFilteredByProperty(QName propertyKey, Serializable propertyValue, int count) Get people filtered by the given property name/value pair.Get a person by userName.Retrieve the person NodeRef for ausername, optionally creating the home folder if it does not exist and optionally creating the person if they don't exist AND the PersonService is configured to allow the creation of missing personsPersonService.setCreateMissingPeople(boolean).Retrieve the person info for an existingperson NodeRefgetPersonOrNull(String userName) Get a person by userName.getUserIdentifier(String caseSensitiveUserName) Given the case sensitive user name find the approriate identifier from the person service.booleanAre user names case sensitive?inthashCode()voidinit()Spring bean init methodbooleanIs the specified user, enabledbooleanCan this service create, delete and update person information?voidnotifyPerson(String userName, String password) Notifies a user by email that their account has been created, and the details of it.voidonCreateNode(ChildAssociationRef childAssocRef) Called when a new node has been created.voidonUpdateProperties(NodeRef nodeRef, Map<QName, Serializable> before, Map<QName, Serializable> after) When a uid is changed we need to create an alias for the old uid so permissions are not broken.voidonUpdatePropertiesUser(NodeRef nodeRef, Map<QName, Serializable> before, Map<QName, Serializable> after) Track theenabled/disabledflag oncm:user.booleanpersonExists(String caseSensitiveUserName) Check if a person exists.voidvoidsetAuthenticationService(MutableAuthenticationService authenticationService) voidsetAuthorityService(AuthorityService authorityService) voidsetCannedQueryRegistry(org.alfresco.util.registry.NamedObjectRegistry<org.alfresco.query.CannedQueryFactory<NodeRef>> cannedQueryRegistry) Set the registry ofcanned queriesvoidsetCreateMissingPeople(boolean createMissingPeople) Set if missing people should be created.voidsetDictionaryService(DictionaryService dictionaryService) voidsetDuplicateMode(String duplicateMode) voidsetEventPublisher(org.alfresco.sync.repo.events.EventPublisher eventPublisher) voidsetHomeFolderCreationDisabled(boolean homeFolderCreationDisabled) Indicates if home folder creation should be disabled.voidsetHomeFolderCreationEager(boolean homeFolderCreationEager) Indicates if home folders should be created when the person is created or delayed until first accessed.voidsetHomeFolderManager(HomeFolderManager homeFolderManager) voidsetIncludeAutoCreated(boolean includeAutoCreated) voidsetLastIsBest(boolean lastIsBest) voidsetNamespacePrefixResolver(NamespacePrefixResolver namespacePrefixResolver) voidsetNodeService(NodeService nodeService) voidsetPermissionServiceSPI(PermissionServiceSPI permissionServiceSPI) voidsetPermissionsManager(PermissionsManager permissionsManager) voidsetPersonCache(SimpleCache<String, Set<NodeRef>> personCache) Set the username to person cache.voidsetPersonProperties(String userName, Map<QName, Serializable> properties) Set the properties on a person - some of these may be persisted in different locations - the home folder is created if it doesn't existvoidsetPersonProperties(String userName, Map<QName, Serializable> properties, boolean autoCreateHomeFolder) Set the properties on a person - some of these may be persisted in different locations.voidsetPolicyComponent(PolicyComponent policyComponent) voidsetProcessDuplicates(boolean processDuplicates) voidsetRepoAdminService(RepoAdminService repoAdminService) voidsetSearchService(SearchService searchService) voidsetServiceRegistry(ServiceRegistry serviceRegistry) voidsetSingletonCache(SimpleCache<String, Object> singletonCache) voidsetStoreUrl(String storeUrl) voidsetTenantService(TenantService tenantService) voidsetTransactionService(TransactionService transactionService) voidsetUserNameMatcher(UserNameMatcher userNameMatcher) static StringupdateUsernameForTenancy(String username, TenantService tenantService) Helper for when creating new users and people: Updates the supplied username with any required tenant details, and ensures that the tenant domains match.Methods inherited from class org.alfresco.repo.transaction.TransactionListenerAdapter
afterRollback, beforeCommit, beforeCompletion, flush
-
Field Details
-
SYSTEM_FOLDER_SHORT_QNAME
- See Also:
-
PEOPLE_FOLDER_SHORT_QNAME
- See Also:
-
KEY_ALLOW_UID_UPDATE
- See Also:
-
-
Constructor Details
-
PersonServiceImpl
public PersonServiceImpl()
-
-
Method Details
-
equals
-
hashCode
public int hashCode() -
init
public void init()Spring bean init method -
setCreateMissingPeople
public void setCreateMissingPeople(boolean createMissingPeople) Set if missing people should be created.- Specified by:
setCreateMissingPeoplein interfacePersonService- Parameters:
createMissingPeople- set to true to create people- See Also:
-
setNamespacePrefixResolver
-
setAuthorityService
-
setAuthenticationService
-
setDictionaryService
-
setPermissionServiceSPI
-
setTransactionService
-
setServiceRegistry
-
setNodeService
-
setTenantService
-
setSingletonCache
-
setSearchService
-
setRepoAdminService
-
setPolicyComponent
-
setStoreUrl
-
setUserNameMatcher
-
setDuplicateMode
-
setIncludeAutoCreated
public void setIncludeAutoCreated(boolean includeAutoCreated) -
setLastIsBest
public void setLastIsBest(boolean lastIsBest) -
setProcessDuplicates
public void setProcessDuplicates(boolean processDuplicates) -
setHomeFolderManager
-
setHomeFolderCreationEager
public void setHomeFolderCreationEager(boolean homeFolderCreationEager) Indicates if home folders should be created when the person is created or delayed until first accessed. -
setHomeFolderCreationDisabled
public void setHomeFolderCreationDisabled(boolean homeFolderCreationDisabled) Indicates if home folder creation should be disabled. -
setAclDAO
-
setPermissionsManager
-
setCannedQueryRegistry
public void setCannedQueryRegistry(org.alfresco.util.registry.NamedObjectRegistry<org.alfresco.query.CannedQueryFactory<NodeRef>> cannedQueryRegistry) Set the registry ofcanned queries -
setPersonCache
Set the username to person cache. -
getPerson
Get a person by userName. The person is store in the repository. The person may be created as a side effect of this call, depending on the setting ofto create missing people or not. The home folder will also be created as a side effect if it does not exist.- Specified by:
getPersonin interfacePersonService- Parameters:
userName- - the userName key to find the person- Returns:
- Returns the person node, either existing or new
- See Also:
-
getPerson
Retrieve the person info for an existingperson NodeRef- Specified by:
getPersonin interfacePersonService- Parameters:
personRef- NodeRef- Returns:
- PersonInfo (username, firstname, lastname)
- Throws:
NoSuchPersonException- if the person doesn't exist
-
getPersonOrNull
Get a person by userName. The person is store in the repository. No missing person objects will be created as a side effect of this call. If the person is missing from the repository null will be returned.- Specified by:
getPersonOrNullin interfacePersonService- Parameters:
userName- - the userName key to find the person- Returns:
- Returns the existing person node, or null if does not exist.
- See Also:
-
getPerson
Retrieve the person NodeRef for ausername, optionally creating the home folder if it does not exist and optionally creating the person if they don't exist AND the PersonService is configured to allow the creation of missing personsPersonService.setCreateMissingPeople(boolean). If not allowed to create missing persons and the person does not exist aNoSuchPersonExceptionexception will be thrown.- Specified by:
getPersonin interfacePersonService- Parameters:
userName- of the person NodeRef to retrieveautoCreateHomeFolderAndMissingPersonIfAllowed- If the person exits: should we create the home folder if it does not exist? If the person exists AND the creation of missing persons is allowed should we create both the person and home folder.- Returns:
- NodeRef of the person as specified by the username
-
personExists
Check if a person exists.- Specified by:
personExistsin interfacePersonService- Parameters:
caseSensitiveUserName- the user name- Returns:
- Returns true if the user exists, otherwise false
-
afterCommit
public void afterCommit()Process clean up any duplicates that were flagged during the transaction.- Specified by:
afterCommitin interfaceTransactionListener- Specified by:
afterCommitin interfaceorg.alfresco.util.transaction.TransactionListener- Overrides:
afterCommitin classTransactionListenerAdapter
-
createMissingPeople
public boolean createMissingPeople()Does this service create people on demand if they are missing. If this is true, a call to getPerson() will create a person if they are missing.- Specified by:
createMissingPeoplein interfacePersonService- Returns:
- true if people are created on demand and false otherwise.
-
getMutableProperties
Get the list of properties that are mutable. Some service may only allow a limited list of properties to be changed. This may be those persisted in the repository or those that can be changed in some other implementation such as LDAP.- Specified by:
getMutablePropertiesin interfacePersonService- Returns:
- A set of QNames that identify properties that can be changed
-
setPersonProperties
Set the properties on a person - some of these may be persisted in different locations - the home folder is created if it doesn't exist- Specified by:
setPersonPropertiesin interfacePersonService- Parameters:
userName- - the user for which the properties should be set.properties- - the map of properties to set (as the NodeService)
-
setPersonProperties
public void setPersonProperties(String userName, Map<QName, Serializable> properties, boolean autoCreateHomeFolder) Set the properties on a person - some of these may be persisted in different locations.- Specified by:
setPersonPropertiesin interfacePersonService- Parameters:
userName- - the user for which the properties should be set.properties- - the map of properties to set (as the NodeService)autoCreateHomeFolder- should we auto-create the home folder if it doesn't exist.
-
isMutable
public boolean isMutable()Can this service create, delete and update person information?- Specified by:
isMutablein interfacePersonService- Returns:
- true if this service allows mutation to people.
-
createPerson
Create a new person with the given properties. The userName is one of the properties. Users with duplicate userNames are not allowed.- Specified by:
createPersonin interfacePersonService- Returns:
- NodeRef
-
createPerson
Create a new person with the given properties, recording them against the given zone name (usually identifying an external user registry from which the details were obtained). The userName is one of the properties. Users with duplicate userNames are not allowed.- Specified by:
createPersonin interfacePersonService- Parameters:
properties- the propertieszones- a set if zones including the identifier for the external user registry owning the person information, ornullor an empty set- Returns:
- the node ref
-
notifyPerson
Notifies a user by email that their account has been created, and the details of it. Normally called afterPersonService.createPerson(Map)orPersonService.createPerson(Map, Set)where email notifications are required.- Specified by:
notifyPersonin interfacePersonService- Parameters:
userName- of the person to notifypassword- of the person to notify
-
getPeopleContainer
Return the container that stores people.- Specified by:
getPeopleContainerin interfacePersonService- Returns:
- NodeRef
-
deletePerson
Delete the person identified by the given user name.- Specified by:
deletePersonin interfacePersonService- Parameters:
userName- String
-
deletePerson
Delete the person identified by the given ref.- Specified by:
deletePersonin interfacePersonService- Parameters:
personRef- NodeRef
-
deletePerson
Delete the person identified by the given ref, and optionally delete the associated authentication, if one.- Specified by:
deletePersonin interfacePersonService- Parameters:
personRef- NodeRefdeleteAuthentication- boolean
-
getAllPeople
Deprecated.see getPeopleGet all the people we know about.- Specified by:
getAllPeoplein interfacePersonService- Returns:
- a set of people in no specific order.
-
getPeople
public org.alfresco.query.PagingResults<PersonService.PersonInfo> getPeople(String pattern, List<QName> filterStringProps, List<Pair<QName, Boolean>> sortProps, org.alfresco.query.PagingRequest pagingRequest) Get paged list of people optionally filtered and/or sorted Note: the pattern is applied to filter props (0 to 3) as startsWithIgnoreCase, which are OR'ed together, for example: cm:userName or cm:firstName or cm:lastName- Specified by:
getPeoplein interfacePersonService- Parameters:
pattern- pattern to apply to filter props - "startsWith" and "ignoreCase"filterStringProps- list of filter properties (these are OR'ed)sortProps- sort property, eg. cm:username ascendingpagingRequest- skip, max + optional query execution id
author janv
-
getPeople
public org.alfresco.query.PagingResults<PersonService.PersonInfo> getPeople(String pattern, List<QName> filterStringProps, Set<QName> inclusiveAspects, Set<QName> exclusiveAspects, boolean includeAdministraotrs, List<Pair<QName, Boolean>> sortProps, org.alfresco.query.PagingRequest pagingRequest) Get paged list of people optionally filtered and/or sorted- Specified by:
getPeoplein interfacePersonService- Parameters:
pattern- StringfilterStringProps- list of filter properties (with "startsWith" values), eg. cm:username "al" might match "alex", "alice", ...inclusiveAspects- if set, filter out any people that don't have one of these aspectsexclusiveAspects- if set, filter out any people that do have one of these aspectsincludeAdministraotrs- true to include administrators in the results.sortProps- sort property, eg. cm:username ascendingpagingRequest- skip, max + optional query execution id
-
getPeople
public org.alfresco.query.PagingResults<PersonService.PersonInfo> getPeople(List<Pair<QName, String>> stringPropFilters, boolean filterIgnoreCase, List<Pair<QName, Boolean>> sortProps, org.alfresco.query.PagingRequest pagingRequest) Deprecated.see getPeople(String pattern, ListfilterProps, List<Pair<QName, Boolean>> sortProps, PagingRequest pagingRequest) Get paged list of people optionally filtered and/or sorted- Specified by:
getPeoplein interfacePersonService- Parameters:
stringPropFilters- list of filter properties (with "startsWith" values), eg. cm:username "al" might match "alex", "alice", ...filterIgnoreCase- true to ignore case when filtering, false to be case-sensitive when filteringsortProps- sort property, eg. cm:username ascendingpagingRequest- skip, max + optional query execution id
author janv
-
getPeopleFilteredByProperty
public Set<NodeRef> getPeopleFilteredByProperty(QName propertyKey, Serializable propertyValue, int count) Get people filtered by the given property name/value pair. In order to get paging, usePersonService.getPeople(List, boolean, List, PagingRequest)- Specified by:
getPeopleFilteredByPropertyin interfacePersonService- Parameters:
propertyKey- property key of property to filter people bypropertyValue- property value of property to filter people bycount- the number of results to retrieve, up to a maximum of 1000- Returns:
- people filtered by the given property name/value pair
- See Also:
-
onCreateNode
Called when a new node has been created.- Specified by:
onCreateNodein interfaceNodeServicePolicies.OnCreateNodePolicy- Parameters:
childAssocRef- the created child association reference
-
beforeCreateNode
public void beforeCreateNode(NodeRef parentRef, QName assocTypeQName, QName assocQName, QName nodeTypeQName) Description copied from interface:NodeServicePolicies.BeforeCreateNodePolicyCalled before a new node is created.- Specified by:
beforeCreateNodein interfaceNodeServicePolicies.BeforeCreateNodePolicy- Parameters:
parentRef- the parent node referenceassocTypeQName- the association type qualified nameassocQName- the association qualified namenodeTypeQName- the node type qualified name
-
beforeCreateNodeValidation
-
beforeDeleteNode
Description copied from interface:NodeServicePolicies.BeforeDeleteNodePolicyCalled before a node is deleted.- Specified by:
beforeDeleteNodein interfaceNodeServicePolicies.BeforeDeleteNodePolicy- Parameters:
nodeRef- the node reference
-
beforeDeleteNodeValidation
-
getUserIdentifier
Given the case sensitive user name find the approriate identifier from the person service. If the system is case sensitive it will return the same string. If case insentive it will return the common object. If the user does not exist it will return null;- Specified by:
getUserIdentifierin interfacePersonService- Parameters:
caseSensitiveUserName- String- Returns:
- String
-
getUserNamesAreCaseSensitive
public boolean getUserNamesAreCaseSensitive()Are user names case sensitive?- Specified by:
getUserNamesAreCaseSensitivein interfacePersonService- Returns:
- boolean
-
onUpdateProperties
public void onUpdateProperties(NodeRef nodeRef, Map<QName, Serializable> before, Map<QName, Serializable> after) When a uid is changed we need to create an alias for the old uid so permissions are not broken. This can happen when an already existing user is updated via LDAP e.g. migration to LDAP, or when a user is auto created and then updated by LDAP This is probably less likely after 3.2 and sync on missing person See https://issues.alfresco.com/jira/browse/ETWOTWO-389 (non-Javadoc)- Specified by:
onUpdatePropertiesin interfaceNodeServicePolicies.OnUpdatePropertiesPolicy- Parameters:
nodeRef- reference to the updated nodebefore- the node's properties before the changeafter- the node's properties after the change
-
onUpdatePropertiesUser
public void onUpdatePropertiesUser(NodeRef nodeRef, Map<QName, Serializable> before, Map<QName, Serializable> after) Track theenabled/disabledflag oncm:user. -
countPeople
public int countPeople()Description copied from interface:PersonServiceCounts the number of persons registered with the system.- Specified by:
countPeoplein interfacePersonService- Returns:
- int
-
updateUsernameForTenancy
public static String updateUsernameForTenancy(String username, TenantService tenantService) throws TenantDomainMismatchException Helper for when creating new users and people: Updates the supplied username with any required tenant details, and ensures that the tenant domains match. If Multi-Tenant is disabled, returns the same username.- Throws:
TenantDomainMismatchException
-
isEnabled
Description copied from interface:PersonServiceIs the specified user, enabled- Specified by:
isEnabledin interfacePersonService- Returns:
- true = enabled.
-
setEventPublisher
public void setEventPublisher(org.alfresco.sync.repo.events.EventPublisher eventPublisher)
-