<?xml version = "1.0" encoding="UTF-8"?>

<ObjectList>
    <!-- Ordner für die ACLs der agoscript-Schulung anlegen.
    In diesem Ordner werden alle ACLs dieser Schulung abgelegt. -->
    <FolderObject SavePoint="${agoscript-Schulung}">
        <Name>agoscript-Schulung</Name>
        <Description>Dieser Ordner enthält alle ACLs für die agoscript-Schulung.</Description>
        <AddToFolder>/agorum/roi/Administration/Role</AddToFolder>
        <NoErrorIfExist />
    </FolderObject>
    
    <!-- Als nächstes werden wir die ACLs anlegen.
    Die ACLs werden wir SavePoints zuordnen, um bei der Zuordnung der Members schneller 
    darauf zugreifen zu können. -->
    
    <!-- ACL_XML-Script-Schulung_Partner_READ:
    Diese ACL soll alle Mitglieder der Partner enthalten und diese per READ in den Bereich lassen. -->
    <CustomAclObject SavePoint="${ACL_agoscript-Schulung_Partner_READ}">
        <Name>ACL_agoscript-Schulung_Partner_READ</Name>
        <Description>ACL, die den Zugriff für alle Partner auf den Partnerbereich herstellt</Description>
        <!-- Jetzt die einzelnen Gruppen mit den Berechtigungen zuordnen. -->
        <ACEs>
            <!-- Hier die Gruppe GRP_agoscript-Schulung_Partner_AlleBenutzer -->
            <AccessControlEntryObject>
                <!-- Die Referenz wird über den Namen hergestellt. -->
                <Grantee RefType="Name" ClassName="DirectoryGroupObject">GRP_agoscript-Schulung_Partner_AlleBenutzer</Grantee>
                <!-- Hier wird eingestellt, ob die Rechte gesetzt (true) oder entzogen (false) werden -->
                <Granted>true</Granted>
                <!-- Da es sich beim AccessControlEntryObject um ein eigenständiges Object handelt, 
                muss hier die Verknüpfung zum ACL gesetzt werden.
                ACHTUNG: Das darf nicht vergessen werden, sonst haben wir eine Leiche in der DB und 
                die ACL funktioniert nicht. -->
                <Acl RefType="SavePoint">${ACL_agoscript-Schulung_Partner_READ}</Acl>
                <PermissionBundleObjects>
                    <!-- Hier wird jetzt das Recht gesetzt, das diese Gruppe hat.
                    Es gibt folgende Rechte, die gesetzt werden können:
                    AG_PB_ALL				Alle Rechte
                    AG_PB_WRITE		  Write-Recht, darf nicht löschen (Wenn nicht der Owner)
                    AG_PB_READ			Nur Lesen
                    AG_PB_PROTECTED	Seine Dateien Ändern, andere Dateien Lesen
                    AG_PB_REVOKED		Keine Rechte -->
                    <!-- Wir verwenden hier READ, damit die Benutzer diesen Bereich sehen können. -->
                    <ArrayElement RefType="Name" ClassName="PermissionBundleObject">AG_PB_READ</ArrayElement>
                </PermissionBundleObjects>
            </AccessControlEntryObject>
        </ACEs>
        <AddToFolder RefType="SavePoint">${agoscript-Schulung}</AddToFolder>
        <NoErrorIfExist />
    </CustomAclObject>
    
    <!-- ACL_agoscript-Schulung_Partner_A: 
    Diese ACL soll alle Mitglieder des Partners A mit den Rechten der einzelnen Gruppen versehen. -->
    <CustomAclObject SavePoint="${ACL_agoscript-Schulung_Partner_A}">
        <Name>ACL_agoscript-Schulung_Partner_A</Name>
        <Description>ACL, die die Rechte der Mitglieder von Partner A regelt.</Description>
        <!-- Jetzt die einzelnen Gruppen mit den Berechtigungen zuordnen -->
        <ACEs>
            <!-- Hier die Gruppe GRP_agoscript-Schulung_Partner_A_ALL -->
            <AccessControlEntryObject>
                <Grantee RefType="Name" ClassName="DirectoryGroupObject">GRP_agoscript-Schulung_Partner_A_ALL</Grantee>
                <Granted>true</Granted>
                <Acl RefType="SavePoint">${ACL_agoscript-Schulung_Partner_A}</Acl>
                <PermissionBundleObjects>
                    <!-- Wir verwenden hier ALL, damit die Benutzer in diesem Bereich alles machen können.-->
                    <ArrayElement RefType="Name" ClassName="PermissionBundleObject">AG_PB_ALL</ArrayElement>
                </PermissionBundleObjects>
            </AccessControlEntryObject>
            <!-- Hier die Gruppe GRP_agoscript-Schulung_Partner_A_READ
            
            Alle Benutzer dieser Gruppe sollen auf jeden Falle READ haben.
            Wir werden dieses jetzt so machen, dass READ - Priorität vor ALL hat.
            Wenn ein Benutzer in der Gruppe READ ist, hat er auf jeden Fall nur READ-recht,
            auch wenn er zusätzlich in der Gruppe ALL enthalten ist.
            Deshalb werden wir die Gruppe zwei mal zuordnen: 
            - einmal werden wir dieser Gruppe alle Rechte entziehen,
            - das andere mal werden wir der Gruppe dann die Rechte geben. 
            Dies muss in dieser Reihenfolge erfolgen, da beim Entziehen der Rechte die Position der 
            Gruppe inerhalb der ACL wichtig ist. -->
            <AccessControlEntryObject>
                <Grantee RefType="Name" ClassName="DirectoryGroupObject">GRP_agoscript-Schulung_Partner_A_READ</Grantee>
                <Granted>false</Granted>
                <Acl RefType="SavePoint">${ACL_agoscript-Schulung_Partner_A}</Acl>
                <PermissionBundleObjects>
                    <!-- Wir verwenden hier ALL, damit den Benutzern der READ-gruppe in diesem Bereich 
                    alle Rechte entzogen werden. -->
                    <ArrayElement RefType="Name" ClassName="PermissionBundleObject">AG_PB_ALL</ArrayElement>
                </PermissionBundleObjects>
            </AccessControlEntryObject>
            <!-- Jetzt setzen wir die Gruppe erneut und dieses Mal mit READ-Rechten. -->
            <AccessControlEntryObject>
                <Grantee RefType="Name" ClassName="DirectoryGroupObject">GRP_agoscript-Schulung_Partner_A_READ</Grantee>
                <Granted>true</Granted>
                <Acl RefType="SavePoint">${ACL_agoscript-Schulung_Partner_A}</Acl>
                <PermissionBundleObjects>
                    <!-- Wir verwenden hier READ, damit die Benutzer der READ-Gruppe in diesem Bereich jetzt 
                    READ-Rechte haben. -->
                    <ArrayElement RefType="Name" ClassName="PermissionBundleObject">AG_PB_READ</ArrayElement>
                </PermissionBundleObjects>
            </AccessControlEntryObject>
            <!-- Und jetzt noch die Gruppe GRP_XML-Script-Schulung_Partner_A_NOT 
            
            In dieser Gruppe sind alle Benutzer enthalten, die auf keinen Fall Zugriff 
            auf diese Akte haben dürfen. Deswegen muss diese Gruppe am Ende angefügt werden.
            
            Sobald Rechte ausgeschlossen werden, ist es so, das die Rechte von oben nach
            unten summiert werden. Wenn dann ganz unten alle Rechte entzogen werden, gilt auf
            jeden Fall dieses Recht. -->
            <AccessControlEntryObject>
                <Grantee RefType="Name" ClassName="DirectoryGroupObject">GRP_agoscript-Schulung_Partner_A_NOT</Grantee>
                <!--  Die Rechte werden entzogen  -->
                <Granted>false</Granted>
                <Acl RefType="SavePoint">${ACL_agoscript-Schulung_Partner_A}</Acl>
                <PermissionBundleObjects>
                    <!-- Wir verwenden hier ALL, damit den Benutzern der NOT-Gruppe in diesem Bereich 
                    alle Rechte entzogen werden. -->
                    <ArrayElement RefType="Name" ClassName="PermissionBundleObject">AG_PB_ALL</ArrayElement>
                </PermissionBundleObjects>
            </AccessControlEntryObject>
        </ACEs>
        <AddToFolder RefType="SavePoint">${agoscript-Schulung}</AddToFolder>
        <NoErrorIfExist />
    </CustomAclObject>
</ObjectList>