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

View File

@@ -29,6 +29,7 @@ import java.util.StringTokenizer;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.search.impl.lucene.LuceneQueryParser; 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.MutableAuthenticationDao;
import org.alfresco.repo.security.authentication.PasswordGenerator; import org.alfresco.repo.security.authentication.PasswordGenerator;
import org.alfresco.repo.security.authentication.UserNameGenerator; 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. * Scripted People service for describing and executing actions against People & Groups.
* *
* @author davidc * @author davidc
* @author kevinr
*/ */
public final class People extends BaseScopableProcessorExtension 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 * @return the person node (type cm:person) created or null if the person
* could not be created * could not be created
*/ */
public ScriptNode createPerson(boolean createUserAccount, public ScriptNode createPerson(boolean createUserAccount, boolean setAccountEnabled)
boolean setAccountEnabled)
{ {
ParameterCheck.mandatory("createUserAccount", createUserAccount); ParameterCheck.mandatory("createUserAccount", createUserAccount);
ParameterCheck.mandatory("setAccountEnabled", setAccountEnabled); 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; return person;
} }
/** /**
* Get the collection of people stored in the repository. * Get the collection of people stored in the repository.
* An optional filter query may be provided by which to filter the people collection. * 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 java.util.Set;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.repo.security.authentication.MutableAuthenticationDao;
import org.alfresco.repo.security.authority.AuthorityDAO; import org.alfresco.repo.security.authority.AuthorityDAO;
import org.alfresco.service.ServiceRegistry; import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
@@ -50,6 +51,7 @@ public class People extends BaseTemplateProcessorExtension
private ServiceRegistry services; private ServiceRegistry services;
private AuthorityDAO authorityDAO; private AuthorityDAO authorityDAO;
private AuthorityService authorityService; private AuthorityService authorityService;
private MutableAuthenticationDao mutableAuthenticationDao;
private PersonService personService; private PersonService personService;
private StoreRef storeRef; private StoreRef storeRef;
@@ -109,6 +111,16 @@ public class People extends BaseTemplateProcessorExtension
this.personService = personService; 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 * Gets the Person given the username
* *
@@ -212,6 +224,18 @@ public class People extends BaseTemplateProcessorExtension
ParameterCheck.mandatory("Person", person); ParameterCheck.mandatory("Person", person);
return this.authorityService.isAdminAuthority((String)person.getProperties().get(ContentModel.PROP_USERNAME)); 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 * Get Contained Authorities