mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-06-30 18:15:39 +00:00
28236: ALF-8810: Removed trailing space from discussion.discussion_for Italian translation 28241: Incremented version revision for 3.4.4 28284: ALF-835 - WCM/AVM: copy (empty) folder into itself 28285: ALF-6863: More than one cifs device breaks the web UI (explorer) 28290: ALF-8840: user-*.atomentry.ftl 28291: ALF-6863: Continuation of fix by Arseny 28336: ALF-8768: Fixed typo in comment on wcm-bootstrap-context.xml 28363: Merged DEV to V3.4-BUG-FIX 28262: ALF-8847: WCM: OrphanReaper contention throws error after 39 retries. Checkin Comment: Use JobLockService to make sure that only one OrphanReaper job is working. Generate list of nodes that must be processed in OrphanReaper.doBatch() transaction. 28386: ALF-9100: Merged PATCHES/V3.4.1 to V3.4-BUG-FIX 28249: ALF-8946: Avoid one full table scan per batch in full reindex - Now each batch scans a single time sample, dynamically adjusted based on the number of transactions in the previous sample, always aiming for 1000 transactions per sample. 28394: Fixed ALF-9090: NPE during inter-cluster subsystem messaging - Bean ID is a List<String> and might not be recognized on receiving machine - Log warning when bean ID is not available (unsymmetrical configuration, perhaps?) 28396: Merged DEV to V3.4-BUG-FIX 28384: ALF-6150: Initial state lost when non-versionable document is saved for the first time Creation of new version of document before writing its content was added to - AbstractAlfrescoMethodHandler->putDocument (this method is used by Office 2003, 2007) - VtiIfHeaderAction->doPut (this method is used by Office 2007 and 2010 on Windows 7) Creation of new version was added twice to AbstractAlfrescoMethodHandler to avoid affecting initial version when transaction is committed. 28432: Merged DEV to V3.4-BUG-FIX 28431: ALF-8530: Pressing the info icon creates an unrecorded file in the ContentStore Use ContentService.getTempWriter() in BaseContentNode$TemplateContentData.getContentAsText() method. 28435: Merged DEV/TEMPORARY to V3.4-BUG-FIX 28428: ALF-9015: cm:modifier not updated when document is updated via CIFS In ContentDiskDriver.closeFile() added ContentModel.PROP_MODIFIER property update. 28436: ALF-8550: Number of http requests (currentThreadsBusy) increases when session times out during creation of webform - Corrected use of read and write locks 28465: Fix for ALF-8023 Share preview doesn't work if... fixed as outlined by Dmitry. 28478: Merged BRANCHES/DEV/ALAN/AUDIT to BRANCHES/DEV/V3.4-BUG-FIX: 28062-28477 (28062,28063,28080,28081,28302,28303,28334,28340,28464,28469,28477) ALF-8438 Need higher level audit of user actions git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@28481 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
276 lines
10 KiB
Java
276 lines
10 KiB
Java
/*
|
|
* Copyright (C) 2005-2011 Alfresco Software Limited.
|
|
*
|
|
* This file is part of Alfresco
|
|
*
|
|
* Alfresco is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Lesser General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* Alfresco is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Lesser General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Lesser General Public License
|
|
* along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
package org.alfresco.service.cmr.security;
|
|
|
|
import java.io.Serializable;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
|
|
import org.alfresco.query.PagingRequest;
|
|
import org.alfresco.service.Auditable;
|
|
import org.alfresco.service.NotAuditable;
|
|
import org.alfresco.service.PublicService;
|
|
import org.alfresco.service.cmr.repository.NodeRef;
|
|
import org.alfresco.service.namespace.QName;
|
|
import org.alfresco.util.Pair;
|
|
|
|
/**
|
|
* This service encapsulates the management of people and groups.
|
|
* <p>
|
|
* <p>
|
|
* People and groups may be managed entirely in the repository or entirely in
|
|
* some other implementation such as LDAP or via NTLM. Some properties may in
|
|
* the repository and some in another store. Individual properties may or may
|
|
* not be mutable.
|
|
* <p>
|
|
*
|
|
* @author Andy Hind
|
|
*/
|
|
public interface PersonService
|
|
{
|
|
/**
|
|
* 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 to
|
|
* {@link #setCreateMissingPeople(boolean) create missing people or not}.
|
|
*
|
|
* @param userName -
|
|
* the userName key to find the person
|
|
* @return Returns the person node, either existing or new
|
|
* @throws NoSuchPersonException
|
|
* if the user doesn't exist and could not be created
|
|
* automatically
|
|
*
|
|
* @see #setCreateMissingPeople(boolean)
|
|
* @see #createMissingPeople()
|
|
*/
|
|
@Auditable(parameters = {"userName"})
|
|
public NodeRef getPerson(String userName);
|
|
|
|
/**
|
|
* Retrieve the person NodeRef for a username key. Depending on the <code>autoCreate</code> parameter and
|
|
* configuration missing people will be created if not found, else a NoSuchPersonException exception will be thrown.
|
|
*
|
|
* @param userName
|
|
* of the person NodeRef to retrieve
|
|
* @param autoCreate
|
|
* should we auto-create the person node and home folder if they don't exist? (and configuration allows
|
|
* us to)
|
|
* @return NodeRef of the person as specified by the username
|
|
* @throws NoSuchPersonException
|
|
* if the person doesn't exist and can't be created
|
|
*/
|
|
@Auditable(parameters = {"userName", "autoCreate"})
|
|
public NodeRef getPerson(final String userName, final boolean autoCreate);
|
|
|
|
/**
|
|
* Check if a person exists.
|
|
*
|
|
* @param userName
|
|
* the user name
|
|
* @return Returns true if the user exists, otherwise false
|
|
*/
|
|
@Auditable(parameters = {"userName"})
|
|
public boolean personExists(String userName);
|
|
|
|
/**
|
|
* 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.
|
|
*
|
|
* @return true if people are created on demand and false otherwise.
|
|
*/
|
|
@Auditable
|
|
public boolean createMissingPeople();
|
|
|
|
/**
|
|
* Set if missing people should be created.
|
|
*
|
|
* @param createMissing
|
|
* set to true to create people
|
|
*
|
|
* @see #getPerson(String)
|
|
*/
|
|
@Auditable(parameters = {"createMissing"})
|
|
public void setCreateMissingPeople(boolean createMissing);
|
|
|
|
/**
|
|
* 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.
|
|
*
|
|
* @return A set of QNames that identify properties that can be changed
|
|
*/
|
|
@Auditable
|
|
public Set<QName> getMutableProperties();
|
|
|
|
/**
|
|
* Set the properties on a person - some of these may be persisted in
|
|
* different locations.
|
|
*
|
|
* @param userName -
|
|
* the user for which the properties should be set.
|
|
* @param properties -
|
|
* the map of properties to set (as the NodeService)
|
|
*/
|
|
@Auditable(parameters = {"userName", "properties"})
|
|
public void setPersonProperties(String userName, Map<QName, Serializable> properties);
|
|
|
|
|
|
/**
|
|
* Set the properties on a person - some of these may be persisted in different locations.
|
|
*
|
|
* @param userName
|
|
* - the user for which the properties should be set.
|
|
* @param properties
|
|
* - the map of properties to set (as the NodeService)
|
|
* @param autoCreate
|
|
* should we auto-create the home folder if it doesn't exist? (and configuration allows us to)
|
|
*/
|
|
@Auditable(parameters = {"userName", "properties", "autoCreate"})
|
|
public void setPersonProperties(String userName, Map<QName, Serializable> properties, boolean autoCreate);
|
|
|
|
/**
|
|
* Can this service create, delete and update person information?
|
|
*
|
|
* @return true if this service allows mutation to people.
|
|
*/
|
|
@Auditable
|
|
public boolean isMutable();
|
|
|
|
/**
|
|
* Create a new person with the given properties. The userName is one of the
|
|
* properties. Users with duplicate userNames are not allowed.
|
|
*
|
|
* @param properties
|
|
* @return
|
|
*/
|
|
@Auditable(parameters = {"properties"})
|
|
public NodeRef createPerson(Map<QName, Serializable> properties);
|
|
|
|
/**
|
|
* 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.
|
|
*
|
|
* @param properties
|
|
* the properties
|
|
* @param zones
|
|
* a set if zones including the identifier for the external user registry owning the person information, or <code>null</code> or an empty set
|
|
* @return the node ref
|
|
*/
|
|
@Auditable(parameters = {"properties", "zones"})
|
|
public NodeRef createPerson(Map<QName, Serializable> properties, Set<String> zones);
|
|
|
|
/**
|
|
* Notifies a user by email that their account has been created, and the details of it.
|
|
* Normally called after {@link #createPerson(Map)} or {@link #createPerson(Map, Set)}
|
|
* where email notifications are required.
|
|
*
|
|
* @param userName
|
|
* of the person to notify
|
|
* @param password
|
|
* of the person to notify
|
|
* @throws NoSuchPersonException
|
|
* if the person doesn't exist
|
|
*/
|
|
@Auditable(parameters = {"userName"})
|
|
public void notifyPerson(final String userName, final String password);
|
|
|
|
/**
|
|
* Delete the person identified by the given user name.
|
|
*
|
|
* @param userName
|
|
*/
|
|
@Auditable(parameters = {"userName"})
|
|
public void deletePerson(String userName);
|
|
|
|
/**
|
|
* Delete the person identified by the given ref.
|
|
*
|
|
* @param personRef
|
|
*/
|
|
@Auditable(parameters = {"personRef"})
|
|
public void deletePerson(NodeRef personRef);
|
|
|
|
/**
|
|
* Get all the people we know about.
|
|
*
|
|
* @return a set of people in no specific order.
|
|
*
|
|
* @deprecated see getPeople
|
|
*/
|
|
@Auditable
|
|
public Set<NodeRef> getAllPeople();
|
|
|
|
/**
|
|
* Get paged list of people optionally filtered and/or sorted
|
|
|
|
* @param filterProps list of filter properties (with "startsWith" values), eg. cm:username "al" might match "alex", "alice", ...
|
|
* @param filterIgnoreCase true to ignore case when filtering, false to be case-sensitive when filtering
|
|
* @param sortProps sort property, eg. cm:username ascending
|
|
* @param pagingRequest skip, max + optional query execution id
|
|
* @since 4.0
|
|
*/
|
|
@Auditable(parameters = {"stringPropFilters", "filterIgnoreCase", "sortProps", "pagingRequest"})
|
|
public PagingPersonResults getPeople(List<Pair<QName,String>> stringPropFilters, boolean filterIgnoreCase, List<Pair<QName, Boolean>> sortProps, PagingRequest pagingRequest);
|
|
|
|
/**
|
|
* Get people filtered by the given property name/value pair
|
|
*
|
|
* @param propertyKey property key of property to filter people by
|
|
* @param propertyValue property value of property to filter people by
|
|
* @return people filtered by the given property name/value pair
|
|
*
|
|
* @deprecated see getPeople
|
|
*/
|
|
@Auditable
|
|
public Set<NodeRef> getPeopleFilteredByProperty(QName propertyKey, Serializable propertyValue);
|
|
|
|
/**
|
|
* Return the container that stores people.
|
|
*
|
|
* @return
|
|
*/
|
|
@Auditable
|
|
public NodeRef getPeopleContainer();
|
|
|
|
/**
|
|
* Are user names case sensitive?
|
|
*
|
|
* @return
|
|
*/
|
|
@Auditable
|
|
public boolean getUserNamesAreCaseSensitive();
|
|
|
|
/**
|
|
* 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;
|
|
*
|
|
* @param caseSensitiveUserName
|
|
* @return
|
|
*/
|
|
@NotAuditable
|
|
public String getUserIdentifier(String caseSensitiveUserName);
|
|
|
|
}
|