<?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.

-->

<section xmlns="http://docbook.org/ns/docbook" version="5.0" xml:id="Java-Broker-Security-Group-Providers">
  <title>Group Providers</title>
  <para>
    The Apache Qpid Broker for Java utilises GroupProviders to allow assigning users to groups for use in <link linkend="Java-Broker-Security-ACLs">ACLs</link>.
    Following authentication by a given <link linkend="Java-Broker-Security-Authentication-Providers">Authentication Provider</link>,
    the configured Group Providers are consulted allowing the assignment of GroupPrincipals for a given authenticated user. Any number of
    Group Providers can be added into the Broker. All of them will be checked for the presence of the groups for a given authenticated user.
  </para>

  <section role="h3" xml:id="File-Group-Manager">
    <title>GroupFile Provider</title>
    <para>
      The <emphasis>GroupFile</emphasis> Provider allows specifying group membership in a flat file on disk.
      On adding a new GroupFile Provider the path to the groups file is required to be specified.
      If file does not exist an empty file is created automatically. On deletion of GroupFile Provider
      the groups file is deleted as well. Only one instance of "GroupFile" Provider per groups file location can be created.
      On attempt to create another GroupFile Provider pointing to the same location the error will be displayed and
      the creation will be aborted.
    </para>

    <section role="h4" xml:id="File-Group-Manager-FileFormat">
       <title>File Format</title>
      <para>
            The groups file has the following format:
          </para>
            <programlisting>
    # &lt;GroupName&gt;.users = &lt;comma delimited user list&gt;
    # For example:

    administrators.users = admin,manager
</programlisting>
          <para>
            Only users can be added to a group currently, not other groups. Usernames can't contain commas.
          </para><para>
            Lines starting with a '#' are treated as comments when opening the file, but these are not preserved when the broker updates the file due to changes made through the management interface.
          </para>
     </section>
  </section>

    <section role="h3" xml:id="Java-Broker-Security-Group-Providers-ManagedGroupProvider">
        <title>ManagedGroupProvider</title>
        <para>
            The <emphasis>ManagedGroupProvider</emphasis> allows specifying group membership as part of broker configuration.
            In future version of Brokers GroupFile Provider will be replaced by this one.
        </para>
    </section>
</section>
