User Account enabled/disabled status now shown on User Details screen in new Administration Console.

Repository JavaScript API now supports getting/setting user account enabled status (admin authority required).
Repository Template API now supports retrieving user account enabled status.
Fixed up line endings on template-services-context.xml.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@13884 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Kevin Roast
2009-04-07 13:04:52 +00:00
parent 5351ed6aa3
commit 0f16f4536b
3 changed files with 218 additions and 163 deletions

View File

@@ -1,156 +1,159 @@
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<bean id="templateService" class="org.alfresco.repo.processor.TemplateServiceImpl">
<property name="defaultTemplateEngine">
<value>freemarker</value>
</property>
<property name="nodeService">
<ref bean="NodeService"/>
</property>
</bean>
<bean id="baseTemplateProcessor" abstract="true" init-method="register">
<property name="templateService">
<ref bean="templateService"/>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<!-- The beans are not thread safe and therefore we create one per request -->
<bean id="freeMarkerProcessor" parent="baseTemplateProcessor" class="org.alfresco.repo.template.FreeMarkerProcessor">
<property name="name">
<value>freemarker</value>
</property>
<property name="extension">
<value>ftl</value>
</property>
</bean>
<!-- base config implementation that template extension beans extend from - for auto registration
as a global template helper with the TemplateService -->
<bean id="baseTemplateImplementation" abstract="true" init-method="register">
<property name="processor">
<ref bean="freeMarkerProcessor"/>
</property>
</bean>
<bean id="avmExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.AVM">
<property name="extensionName">
<value>avm</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<bean id="sessionTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.Session">
<property name="extensionName">
<value>session</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<bean id="classificationTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.Classification">
<property name="extensionName">
<value>classification</value>
</property>
<property name="storeUrl">
<value>${spaces.store}</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<bean id="workflowTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.Workflow">
<property name="extensionName">
<value>workflow</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<bean id="peopleTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.People">
<property name="extensionName">
<value>people</value>
</property>
<property name="storeUrl">
<value>${spaces.store}</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
<property name="authorityDAO">
<ref bean="authorityDAO"/>
</property>
<property name="authorityService">
<ref bean="AuthorityService"/>
</property>
<property name="personService">
<ref bean="PersonService"/>
</property>
</bean>
<bean id="siteTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.Site">
<property name="extensionName">
<value>site</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
<property name="siteService">
<ref bean="SiteService"/>
</property>
</bean>
<bean id="hasAspectTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.HasAspectMethod">
<property name="extensionName">
<value>hasAspect</value>
</property>
</bean>
<bean id="hasPermissionTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.HasPermissionMethod">
<property name="extensionName">
<value>hasPermission</value>
</property>
</bean>
<bean id="messageTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.I18NMessageMethod">
<property name="extensionName">
<value>message</value>
</property>
</bean>
<bean id="dateCompareTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.DateCompareMethod">
<property name="extensionName">
<value>dateCompare</value>
</property>
</bean>
<bean id="incrementDateTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.DateIncrementMethod">
<property name="extensionName">
<value>incrementDate</value>
</property>
</bean>
<bean id="xmlDateTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.ISO8601DateFormatMethod">
<property name="extensionName">
<value>xmldate</value>
</property>
</bean>
<bean id="cropContentTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.CropContentMethod">
<property name="extensionName">
<value>cropContent</value>
</property>
</bean>
</beans>
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'>
<beans>
<bean id="templateService" class="org.alfresco.repo.processor.TemplateServiceImpl">
<property name="defaultTemplateEngine">
<value>freemarker</value>
</property>
<property name="nodeService">
<ref bean="NodeService"/>
</property>
</bean>
<bean id="baseTemplateProcessor" abstract="true" init-method="register">
<property name="templateService">
<ref bean="templateService"/>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<!-- The beans are not thread safe and therefore we create one per request -->
<bean id="freeMarkerProcessor" parent="baseTemplateProcessor" class="org.alfresco.repo.template.FreeMarkerProcessor">
<property name="name">
<value>freemarker</value>
</property>
<property name="extension">
<value>ftl</value>
</property>
</bean>
<!-- base config implementation that template extension beans extend from - for auto registration
as a global template helper with the TemplateService -->
<bean id="baseTemplateImplementation" abstract="true" init-method="register">
<property name="processor">
<ref bean="freeMarkerProcessor"/>
</property>
</bean>
<bean id="avmExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.AVM">
<property name="extensionName">
<value>avm</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<bean id="sessionTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.Session">
<property name="extensionName">
<value>session</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<bean id="classificationTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.Classification">
<property name="extensionName">
<value>classification</value>
</property>
<property name="storeUrl">
<value>${spaces.store}</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<bean id="workflowTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.Workflow">
<property name="extensionName">
<value>workflow</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
</bean>
<bean id="peopleTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.People">
<property name="extensionName">
<value>people</value>
</property>
<property name="storeUrl">
<value>${spaces.store}</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
<property name="authorityDAO">
<ref bean="authorityDAO"/>
</property>
<property name="authorityService">
<ref bean="AuthorityService"/>
</property>
<property name="personService">
<ref bean="PersonService"/>
</property>
<property name="mutableAuthenticationDao">
<ref bean="authenticationDao"/>
</property>
</bean>
<bean id="siteTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.Site">
<property name="extensionName">
<value>site</value>
</property>
<property name="serviceRegistry">
<ref bean="ServiceRegistry"/>
</property>
<property name="siteService">
<ref bean="SiteService"/>
</property>
</bean>
<bean id="hasAspectTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.HasAspectMethod">
<property name="extensionName">
<value>hasAspect</value>
</property>
</bean>
<bean id="hasPermissionTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.HasPermissionMethod">
<property name="extensionName">
<value>hasPermission</value>
</property>
</bean>
<bean id="messageTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.I18NMessageMethod">
<property name="extensionName">
<value>message</value>
</property>
</bean>
<bean id="dateCompareTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.DateCompareMethod">
<property name="extensionName">
<value>dateCompare</value>
</property>
</bean>
<bean id="incrementDateTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.DateIncrementMethod">
<property name="extensionName">
<value>incrementDate</value>
</property>
</bean>
<bean id="xmlDateTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.ISO8601DateFormatMethod">
<property name="extensionName">
<value>xmldate</value>
</property>
</bean>
<bean id="cropContentTemplateExtension" parent="baseTemplateImplementation" class="org.alfresco.repo.template.CropContentMethod">
<property name="extensionName">
<value>cropContent</value>
</property>
</bean>
</beans>

View File

@@ -29,6 +29,7 @@ import java.util.StringTokenizer;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.search.impl.lucene.LuceneQueryParser;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
import org.alfresco.repo.security.authentication.PasswordGenerator;
import org.alfresco.repo.security.authentication.UserNameGenerator;
@@ -53,6 +54,7 @@ import org.mozilla.javascript.Scriptable;
* Scripted People service for describing and executing actions against People & Groups.
*
* @author davidc
* @author kevinr
*/
public final class People extends BaseScopableProcessorExtension
{
@@ -174,8 +176,7 @@ public final class People extends BaseScopableProcessorExtension
* @return the person node (type cm:person) created or null if the person
* could not be created
*/
public ScriptNode createPerson(boolean createUserAccount,
boolean setAccountEnabled)
public ScriptNode createPerson(boolean createUserAccount, boolean setAccountEnabled)
{
ParameterCheck.mandatory("createUserAccount", createUserAccount);
ParameterCheck.mandatory("setAccountEnabled", setAccountEnabled);
@@ -213,13 +214,41 @@ public final class People extends BaseScopableProcessorExtension
}
/**
* Enable person's user account
* Enable user account. Can only be called by an Admin authority.
*
* @param userName user name of person for which to enable user account
* @param userName user name for which to enable user account
*/
public void enablePerson(String userName)
public void enableAccount(String userName)
{
mutableAuthenticationDao.setEnabled(userName, true);
if (this.authorityService.isAdminAuthority(AuthenticationUtil.getFullyAuthenticatedUser()))
{
this.mutableAuthenticationDao.setEnabled(userName, true);
}
}
/**
* Disable user account. Can only be called by an Admin authority.
*
* @param userName user name for which to disable user account
*/
public void disableAccount(String userName)
{
if (this.authorityService.isAdminAuthority(AuthenticationUtil.getFullyAuthenticatedUser()))
{
this.mutableAuthenticationDao.setEnabled(userName, false);
}
}
/**
* Return true if the specified user account is enabled.
*
* @param userName user name to test account
*
* @return true if account enabled, false if disabled
*/
public boolean isAccountEnabled(String userName)
{
return this.mutableAuthenticationDao.getEnabled(userName);
}
/**
@@ -246,7 +275,6 @@ public final class People extends BaseScopableProcessorExtension
return person;
}
/**
* Get the collection of people stored in the repository.
* An optional filter query may be provided by which to filter the people collection.

View File

@@ -30,6 +30,7 @@ import java.util.List;
import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
import org.alfresco.repo.security.authority.AuthorityDAO;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef;
@@ -50,6 +51,7 @@ public class People extends BaseTemplateProcessorExtension
private ServiceRegistry services;
private AuthorityDAO authorityDAO;
private AuthorityService authorityService;
private MutableAuthenticationDao mutableAuthenticationDao;
private PersonService personService;
private StoreRef storeRef;
@@ -109,6 +111,16 @@ public class People extends BaseTemplateProcessorExtension
this.personService = personService;
}
/**
* Set the mutable authentication dao
*
* @param mutableAuthenticationDao Mutable Authentication DAO
*/
public void setMutableAuthenticationDao(MutableAuthenticationDao mutableAuthenticationDao)
{
this.mutableAuthenticationDao = mutableAuthenticationDao;
}
/**
* Gets the Person given the username
*
@@ -212,6 +224,18 @@ public class People extends BaseTemplateProcessorExtension
ParameterCheck.mandatory("Person", person);
return this.authorityService.isAdminAuthority((String)person.getProperties().get(ContentModel.PROP_USERNAME));
}
/**
* Return true if the specified user account is enabled.
*
* @param person to test
*
* @return true if account enabled, false if disabled
*/
public boolean isAccountEnabled(TemplateNode person)
{
return this.mutableAuthenticationDao.getEnabled((String)person.getProperties().get(ContentModel.PROP_USERNAME));
}
/**
* Get Contained Authorities