mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
03.43.2013 a9394eec5f5d08a9493f1d92057db2910fe4df4c
First stab at having debuggable ACIs.
Modified the code after feedback from Ludo.

EnumRight.java:
In getEnumRight(), changed the order of the tests to cater for the new info + added comments.
Removed DELWRITE and ADDWRITE supposedly mirroring the effective rights seflwrite_del and seflwrite_add, but never used in the code.
javadocs: added @see tags.

EnumRightTest.java: ADDED
1 files added
1 files modified
139 ■■■■ changed files
opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/EnumRight.java 60 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/EnumRightTest.java 79 ●●●●● patch | view | raw | blame | history
opendj-sdk/opends/src/server/org/opends/server/authorization/dseecompat/EnumRight.java
@@ -39,59 +39,71 @@
    /**
     * This enumeration is returned when the result of the right is "read".
     *
     * @see Aci#ACI_READ
     */
    READ        ("read"),
    /**
     * This enumeration is returned when the result of the right is "write".
     *
     * @see Aci#ACI_WRITE
     */
    WRITE       ("write"),
    /**
     * This enumeration is returned when the result of the right is "add".
     *
     * @see Aci#ACI_ADD
     */
    ADD         ("add"),
    /**
     * This enumeration is returned when the result of the right is "delete".
     *
     * @see Aci#ACI_DELETE
     */
    DELETE      ("delete"),
    /**
     * This enumeration is returned when the result of the right is "search".
     *
     * @see Aci#ACI_SEARCH
     */
    SEARCH      ("search"),
    /**
     * This enumeration is returned when the result of the right is "compare".
     *
     * @see Aci#ACI_COMPARE
     */
    COMPARE     ("compare"),
    /**
     * This enumeration is returned when the result of the right is
     * "selfwrite".
     *
     * @see Aci#ACI_SELF
     */
    SELFWRITE   ("selfwrite"),
    /**
     * This enumeration is returned when the result of the right is "proxy".
     *
     * @see Aci#ACI_PROXY
     */
    PROXY       ("proxy"),
    /**
     * This enumeration is returned when the result of the right is "import".
     *
     * @see Aci#ACI_IMPORT
     */
    IMPORT      ("import"),
    /**
     * This enumeration is returned when the result of the right is "export".
     *
     * @see Aci#ACI_EXPORT
     */
    EXPORT      ("export"),
    /**
     * This enumeration is returned when the result of the right is "all".
     *
     * @see Aci#ACI_ALL
     */
    ALL         ("all"),
    /**
     * This enumeration is used internally by the modify operation
     * processing and is not part of the ACI syntax.
     */
    DELWRITE    ("delwrite"),
    /**
     * This enumerations is used internally by the modify operation
     * processing and is not part of the ACI syntax.
     */
    ADDWRITE    ("addwrite");
    ALL         ("all");
    /**
     * The name of the right.
@@ -193,10 +205,22 @@
     * @return EnumRight corresponding to the provided rightsMask.
     */
    public static Set<EnumRight> getEnumRight(int rightsMask) {
        if (hasRights(rightsMask, ACI_ALL))
            return EnumSet.of(ALL);
        final EnumSet<EnumRight> results = EnumSet.noneOf(EnumRight.class);
        // Next 3 rights are not included in ALL for historical reasons.
        // ALL already existed when they got added. For compatibility reasons
        // with existing deployments, they were not included in ALL.
        if (hasRights(rightsMask, ACI_EXPORT))
            results.add(EXPORT);
        if (hasRights(rightsMask, ACI_IMPORT))
            results.add(IMPORT);
        if (hasRights(rightsMask, ACI_PROXY))
            results.add(PROXY);
        if (hasRights(rightsMask, ACI_ALL)) {
            results.add(ALL);
            return results;
        }
        // the remaining rights are already included in ALL
        if (hasRights(rightsMask, ACI_READ))
            results.add(READ);
        if (hasRights(rightsMask, ACI_WRITE))
@@ -209,13 +233,7 @@
            results.add(SEARCH);
        if (hasRights(rightsMask, ACI_COMPARE))
            results.add(COMPARE);
        if (hasRights(rightsMask, ACI_EXPORT))
            results.add(EXPORT);
        if (hasRights(rightsMask, ACI_IMPORT))
            results.add(IMPORT);
        if (hasRights(rightsMask, ACI_PROXY))
            results.add(PROXY);
        if (hasRights(rightsMask, ACI_SELF))
        if (hasRights(rightsMask, ACI_SELF)) // included in WRITE
            results.add(SELFWRITE);
        return results;
    }
opendj-sdk/opends/tests/unit-tests-testng/src/server/org/opends/server/authorization/dseecompat/EnumRightTest.java
New file
@@ -0,0 +1,79 @@
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License, Version 1.0 only
 * (the "License").  You may not use this file except in compliance
 * with the License.
 *
 * You can obtain a copy of the license at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE
 * or https://OpenDS.dev.java.net/OpenDS.LICENSE.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at
 * trunk/opends/resource/legal-notices/OpenDS.LICENSE.  If applicable,
 * add the following below this CDDL HEADER, with the fields enclosed
 * by brackets "[]" replaced with your own identifying information:
 *      Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 *
 *
 *      Copyright 2013 ForgeRock AS
 */
package org.opends.server.authorization.dseecompat;
import static org.opends.server.authorization.dseecompat.Aci.*;
import static org.opends.server.authorization.dseecompat.EnumRight.*;
import static org.testng.Assert.*;
import java.util.EnumSet;
import java.util.Set;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
@SuppressWarnings("javadoc")
public class EnumRightTest extends AciTestCase
{
  private static final int ALL_RIGHTS_MASK = ACI_READ | ACI_WRITE | ACI_ADD
      | ACI_DELETE | ACI_SEARCH | ACI_COMPARE | ACI_SELF;
  @DataProvider(name = "aciRightsToEnumRights")
  public Object[][] aciRightsToEnumRights()
  {
    return new Object[][] {
      { ACI_NULL, EnumSet.noneOf(EnumRight.class) },
      { ACI_READ, EnumSet.of(READ) },
      { ACI_WRITE, EnumSet.of(WRITE) },
      { ACI_ADD, EnumSet.of(ADD) },
      { ACI_DELETE, EnumSet.of(DELETE) },
      { ACI_SEARCH, EnumSet.of(SEARCH) },
      { ACI_COMPARE, EnumSet.of(COMPARE) },
      { ACI_SELF, EnumSet.of(SELFWRITE) },
      { ALL_RIGHTS_MASK, EnumSet.of(ALL) },
      { ACI_ALL, EnumSet.of(ALL) },
      { ACI_EXPORT , EnumSet.of(EXPORT) },
      { ACI_IMPORT, EnumSet.of(IMPORT) },
      { ACI_PROXY, EnumSet.of(PROXY) },
      { ACI_EXPORT | ACI_IMPORT, EnumSet.of(EXPORT, IMPORT) },
      { ACI_ALL | ACI_EXPORT | ACI_IMPORT, EnumSet.of(ALL, EXPORT, IMPORT) },
    };
  }
  @Test
  public void aciAllValue() throws Exception
  {
    assertEquals(ALL_RIGHTS_MASK, ACI_ALL);
  }
  @Test(dependsOnMethods = "aciAllValue", dataProvider = "aciRightsToEnumRights")
  public void getEnumRight(int aciRightsMask, Set<EnumRight> enumRightSet) throws Exception
  {
    assertEquals(EnumRight.getEnumRight(aciRightsMask), enumRightSet);
  }
}