 ------
 Apache Archiva Redback Runtime Configuration
 ------
 Olivier Lamy
 ------
 2012-12-21
 ------

~~ Licensed to the Apache Software Foundation (ASF) under one                      
~~ or more contributor license agreements.  See the NOTICE file                    
~~ distributed with this work for additional information                           
~~ regarding copyright ownership.  The ASF licenses this file                      
~~ to you under the Apache License, Version 2.0 (the                               
~~ "License"); you may not use this file except in compliance                      
~~ with the License.  You may obtain a copy of the License at                      
~~                                                                                 
~~   http://www.apache.org/licenses/LICENSE-2.0                                    
~~                                                                                 
~~ Unless required by applicable law or agreed to in writing,                      
~~ software distributed under the License is distributed on an                     
~~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY                          
~~ KIND, either express or implied.  See the License for the                       
~~ specific language governing permissions and limitations                         
~~ under the License.                                                              

Apache Archiva Redback Runtime Configuration

%{toc}

* Apache Redback User Manager/RbacManager Implementations

  You can choose to switch dynamically

   * User Manager Implementations (from Database and/or LDAP).

   * RbacManager Implementations (from Database and/or LDAP): to manage if roles management comes from Database and/or LDAP.

   []

[../images/redback-runtime-conf-general.png]

* LDAP configuration

  LDAP configuration can now be done via an UI and it's now dynamic (no more need of using vi to edit a file :-) ) and no more need of restarting.

  You can test your ldap configuration too.

[../images/ldap-configuration.png]

* LDAP Group-Roles mapping

  You can map dynamically LDAP Group to Archiva Roles

[../images/ldap-group-roles-mapping.png]

* Runtime properties

  You can now too modify some Redback configuration properties. You have a help button which explains to you what the property is doing.

[../images/redback-properties.png]

* Users Cache

  You can enable/disable users cache and configure various ttl values

[../images/redback-runtime-conf-users-cache.png]
