<?xml version="1.0"?>
<!--
  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.
-->

<xconf xpath="/cocoon" unless="/cocoon/access-controller-resolvers">
  <access-controller-resolvers>
    <component-instance name="publication"
      class="org.apache.lenya.cms.ac.PublicationAccessControllerResolver"
      logger="lenya.ac.accesscontrollerresolver.publication">
    </component-instance>
    <component-instance name="global"
      class="org.apache.lenya.ac.impl.ConfigurableAccessControllerResolver"
      logger="lenya.ac.accesscontrollerresolver.global">
      <access-controller type="global"/>
    </component-instance>
    <component-instance name="composable"
      class="org.apache.lenya.ac.impl.ComposableAccessControllerResolver"
      logger="lenya.ac.accesscontrollerresolver.composable">
      <resolver type="publication"/>
      <!--      <resolver type="global"/>-->
    </component-instance>
  </access-controller-resolvers>
</xconf>
