1. Every directory node is associated with a set of three permission strings.

a)  The first string denotes the group that owns the node and is called the OWNER
b)  The second string denotes the group that has read and write access to it and
    is called the READ_WRITE_GROUP
c)  The third string denotes the group that has only read access to the node and
    is called the READ_ONLY_GROUP

2.  OWNER rights
    a. An owner can add other owners to the node
    b. An owner cannot remove other owners from the node.
    c. An owner can add a READ_WRITE_GROUP to the node
    d. An owner can remove a READ_WRITE_GROUP from the node
    e. An owner can read the node
    f. An owner can write or delete a node.

    In other words an OWNER can modify the permissions for the node and
    read/write a node.

    a. Can read/write a node
    b. Cannot change permissions for a node

3.  READ_ONLY_GROUP rights
    a. Can read a node
    b. Cannot write or change the permissions for a node

4.  Default groups
    a. Everybody : Denotes everyone
    b. Nobody : Denotes no one.

5.  Default Users
    a.  Administrator: Has full control on everything. Can create, delete,
        modify users/groups, change permissions on nodes, read/write nodes.
    b.  PowerUser: Can create, delete, modify users/groups. Cannot change
        permissions on nodes, can read nodes but not write nodes.

6.  NodeAuthorization API: The following lists the operations and the people who
    can perform them

    a.  String getOwner(String path): OWNER, READ_WRITE_GROUP, READ_ONLY_GROUP
    b.  String getReadWriteGroup(String path): OWNER, READ_WRITE_GROUP,
    c.  String getReadOnlyGroup(String path): OWNER, READ_WRITE_GROUP,
    d.  setOwner(String path, String DNOfOwner, boolean recursive): OWNER
    e.  setReadWriteGroup(String path, String DNOfReadWriteGroup,
        boolean recursive): OWNER
    f.  setReadOnlyGroup(String path, String DNOfReadOnlyGroup,
        boolean recursive): OWNER

5.  UserManagement API: The following lists the operations and the people who
    can perform them

    a.  createUser(String DN): Administrator, PowerUser
    b.  deleteUser(String DN): Administrator, PowerUser
    c.  createGroup(String DN): Administrator, PowerUser
    d.  deleteGroup(String DN): Administrator, PowerUser
    e.  addDNToGroup(String DNOfUserOrGroupToAdd, String DNOfGroupToBeAddedTo)
    f.  deleteDNFromGroup(String DNOfUserOrGroupToDelete,
        String DNOfGroupFromWhereToDelete)
    g.  listMembers(String DNOfGroup)