de.jsystems.framework.security.acl
Class BaseAcl

java.lang.Object
  extended byde.jsystems.framework.security.acl.BaseOwner
      extended byde.jsystems.framework.security.acl.BaseAcl
All Implemented Interfaces:
Acl, Owner

public class BaseAcl
extends BaseOwner
implements Acl

Beispielimplementierung für das Interface Acl. Diese Klasserepräsentiert eine Access Control List(ACL). Eine ACL ist eine Datenstruktur um den Zugriff auf Ressourcen zu schützen. Eine ACL kann als Tabelle mit mehreren Einträgen betrachtet werden. Jeder Eintrag vom Typ AclEntry enthält einen Satz von Rechten(Permission) für einen Principal. (Ein 'Principal' ist eine Einheit und stellt entweder eine einzelne Person(User) oder eine Gruppe dar.)) Zusätzlich ist jeder Eintrag entweder positiv oder negativ. Positiv bedeutet hier, das alle enthaltenen Rechte dem zugehörigen Principal zugewiesen sind. Negativ bedeutet, das alle enthaltenen Rechte dem zugehörigen Principal entzogen sind. Die Einträge in einer ACL unterliegen den folgenden Regeln: Jeder Principal kann nur einen positiven Eintrag und einen negativen Eintrag haben. Das heist mehrere positive oder negative Einträge sind nicht erlaubt für einen Principal. Jeder Eintrag hat einen Satz von Rechten, die dem Principal entweder erlaubt oder entzogen sind. Somit machen mehrere positive(=erlaubte) oder negative(=verbotene) Einträge auch keinen Sinn. Wenn es für einen Principal keine Einträge gibt, so hat dieser Principal einen NULL-Rechte-Satz (einen leeren Satz von Rechten). Wenn es einen positiven Eintrag gibt, der dem Principal ein Recht zusichert und einen negativen Eintrag, der im das gleiche Recht verweigert, so bedeutet das, daß dieses Recht weder zugewiesen noch entzogen ist. Indiviuelle Rechte zu einem konkreten Benutzer überschreiben Einstellungen aus der Gruppe zu der der Benutzer gehört. Das heist individuelle negative Rechte überschreiben die Erlaubnis zu diesem Recht aus der Gruppe und Rechte, die der Gruppe entzogen wurden können einzelnen Mitgliedern der Gruppe wieder zugewiesen werden. Das java.security.acl-Package enthält alle Interfaces für die Implementierung einer ACL und der benötigten Strukturen(AclEntry, Group, Owner, etc.). Im Package sun.security.acl(Enthalten in der Datei rt.jar. Keine Beschreibung im JDK vorhanden) befindet sich eine Default-Implementierung zu diesen Interfaces. Aus dieser Default-Implementierung entstanden die Klassen im Package de.jsystems.framework.security.acl.

Version:
1.0
Copyright by Jens Homm 2001 - 2003
Author:
Jens Homm JSYSTEMS

Constructor Summary
BaseAcl(Principal owner, String name)
          Konstruktor.
 
Method Summary
 boolean addEntry(Principal caller, AclEntry entry)
          Fügt der ACL einen neuen Eintrag hinzu.
 boolean checkPermission(Principal principal, Permission permission)
          Prüft ob der übergebene Principal über das übergeben Recht verfügt.
 Enumeration entries()
          Gibt eine Enumeration mit allen Einträgen aus der ACL zurück.
 Enumeration getGroupNegative(Group g)
          Gibt eine Enumeration mit allen entzogenen Rechten der Gruppe zurück.
 Enumeration getGroupNegative(Principal principal)
          Gibt eine Enumeration mit allen entzogenen Rechten der Gruppe zurück zu der der Principal gehört.
 Enumeration getGroupPositive(Group g)
          Gibt eine Enumeration mit allen erlaubten Rechten der übergebenen Gruppe zurück.
 Enumeration getGroupPositive(Principal principal)
          Gibt eine Enumeration mit allen erlaubten Rechten der Gruppe zurück zu der der Principal gehört.
 Enumeration getIndividualNegative(Principal principal)
          Gibt eine Enumeration mit allen entzogenen Rechten des Principals zurück.
 Enumeration getIndividualPositive(Principal principal)
          Gibt eine Enumeration mit allen Rechten des Principals zurück.
 String getName()
          Gibt den Namen der ACL zurück.
 Enumeration getPermissions(Principal user)
          Gibt eine Enumeration mit einer Liste aller erlaubten Rechten für den spezifizierten Principal (repräsentiert entweder einen User oder eine Gruppe) zurück.
 boolean removeEntry(Principal caller, AclEntry entry)
          Löscht einen Eintrag aus der ACL.
 void setName(Principal caller, String name)
          Setzt den Namen für diese ACL.
 String toString()
          Gibt eine Stringrepräsentation über den Inhalt dieser ACL zurück.
 
Methods inherited from class de.jsystems.framework.security.acl.BaseOwner
addOwner, deleteOwner, isOwner
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface java.security.acl.Owner
addOwner, deleteOwner, isOwner
 

Constructor Detail

BaseAcl

public BaseAcl(Principal owner,
               String name)
Konstruktor. Legt eine neue ACL an. Der übergebene Principal(User) ist der Owner dieser Acl. Nur dieser kann an der ACL Änderungen vornehmen(Neue Owner hinzufügen oder löschen, neue Einträge hinzufügen).

Parameters:
owner - Eigentümer der ACL.
name - Der Name der ACL.
Method Detail

setName

public void setName(Principal caller,
                    String name)
             throws NotOwnerException
Setzt den Namen für diese ACL. Diese Methode kann nur vom Besitzer der ACL aufgerufen werden.

Specified by:
setName in interface Acl
Parameters:
caller - Der Principal, der diese Methode aufgerufen hat. Er muß ein Owner dieser ACL sein, sonst wird eine Exception ausgelöst.
name - Der Name für diese Acl.
Throws:
NotOwnerException - wenn der Aufrufer(caller) kein Besitzer dieser ACL ist.

getName

public String getName()
Gibt den Namen der ACL zurück.

Specified by:
getName in interface Acl
Returns:
Der Name der ACL.

addEntry

public boolean addEntry(Principal caller,
                        AclEntry entry)
                 throws NotOwnerException
Fügt der ACL einen neuen Eintrag hinzu. Ein Eintrag gehört zu einem Principal(Ein Benutzer oder eine Gruppe) und enthält einen Satz von Rechten. Jeder Principal kann maximal einen positiven(Satz mit erlaubten Rechten) und einen negativen(Satz mit entzogenen Rechten) Eintrag haben. Wenn es für den Eigentümer des Eintrages schon einen Eintrag vom gleichen Typ in der ACL gibt wird false zurückgegeben und der Eintrag wird nicht hinzugefügt.

Specified by:
addEntry in interface Acl
Parameters:
caller - Der Principal, der diese Methode aufgerufen hat. Er muß ein Owner dieser ACL sein, sonst wird eine Exception ausgelöst.
entry - Der Eintrag der der ACL hinzugefügt werden soll.
Returns:
true bei Erfolg, false wenn es einen Eintrag vom gleichen Typ für den zugehörigen Principal schon gibt.
Throws:
NotOwnerException - wenn der Aufrufer kein Owner dieser ACL ist.

removeEntry

public boolean removeEntry(Principal caller,
                           AclEntry entry)
                    throws NotOwnerException
Löscht einen Eintrag aus der ACL.

Specified by:
removeEntry in interface Acl
Parameters:
caller - Der Principal, der diese Methode aufgerufen hat. Er muß ein Owner dieser ACL sein, sonst wird eine Exception ausgelöst.
entry - Der zu löschende Eintrag in der ACL.
Returns:
true bei Erfolg, false wenn es diesen Eintrag in der ACL nicht gibt.
Throws:
NotOwnerException - wenn der Aufrufer kein Owner dieser ACL ist.

getPermissions

public Enumeration getPermissions(Principal user)
Gibt eine Enumeration mit einer Liste aller erlaubten Rechten für den spezifizierten Principal (repräsentiert entweder einen User oder eine Gruppe) zurück. Diese Liste wird folgendermassen ermittelt: Wenn es keinen Eintrag für diesen Principal gibt wird eine leere Enumeration zurückgegeben. Andernfalls werden erst alle erlaubten Rechte der Gruppe ermittelt zu der der Principal gehört(Ein Principal kann zu mehreren Gruppen gehören. Eine Gruppe wird durch die Implementierung der Klasse BaseGroup dargestellt.). Der Gruppe erlaubte Rechte ist die Vereinigung(Union) aller positiven Rechte aller Gruppen zu denen der Principal gehört. Der Gruppe entzogene Rechte ist die Vereinigung aller entzogener Rechte aller Gruppen zu denen der Principal gehört. Falls sich ein Recht in beiden(negativen und positiven)Rechtelisten befindet wird es aus beiden Listen entfernt. Die individuellen Rechte werden genauso ermittelt. Die positive Rechteliste enthält alle Rechte, die sich im positiven Eintrag befinden(sofern vorhanden), die negative Rechteliste enthält alle Rechte, die sich im negativen Eintrag befinden(sofern vorhanden). Die individuelle positive(oder negative) Rechteliste kann leer sein wenn keine entsprechenden Einträge vorhanden sind. Die endgültige Liste der für den spezifizierten User erlaubten Rechte wird nun nach der einfachen Regel ermittelt das individuelle Rechte Gruppenrechte überschreiben. Das heist, das die individuellen entzogenen Rechte die der Gruppe erlaubten Rechte überschreiben und die individuell erlaubten Rechte die der Gruppe entzogenen Rechte überschreiben.

Specified by:
getPermissions in interface Acl
Parameters:
user - Der Principal dessen Rechte zurückgegeben werden sollen.
Returns:
Einen Satz von Rechten die dem User zugeordnet sind.

checkPermission

public boolean checkPermission(Principal principal,
                               Permission permission)
Prüft ob der übergebene Principal über das übergeben Recht verfügt. Wenn ja wird true zurückgegeben, ansonsten false. Diese Methode prüft, ob die übergebene Berechtigung in der Liste der erlaubten Rechte für diesen Principal enthalten ist. Dabei wird der gleiche Alorithmus benutzt wie in der Methode getPermissions(java.security.Principal).

Specified by:
checkPermission in interface Acl
Parameters:
principal - Der Principal, dessen Berechtigung geprüft werden soll.
permission - Die zu prüfende Berechtigung.
Returns:
true wenn der Principal über die entsprechende Berechtigung verfügt, ansonsten false.
See Also:
getPermissions(java.security.Principal)

entries

public Enumeration entries()
Gibt eine Enumeration mit allen Einträgen aus der ACL zurück. Jeder Eintrag in der Enumeration ist vom Typ AclEntry.

Specified by:
entries in interface Acl
Returns:
Eine Enumeration über alle Einträge in dieser ACL.

toString

public String toString()
Gibt eine Stringrepräsentation über den Inhalt dieser ACL zurück. Dabei werden alle in der ACL enthaltenen Eintraege vom Typ AclEntry in einem StringBuffer aneinander gefuegt.

Specified by:
toString in interface Acl
Returns:
Eine Stringrepräsentation über den Inhalt dieser ACL.

getGroupPositive

public Enumeration getGroupPositive(Principal principal)
Gibt eine Enumeration mit allen erlaubten Rechten der Gruppe zurück zu der der Principal gehört. Falls der Principal zu mehreren Gruppen gehört werden die Rechte aller Gruppen zu denen der Principal gehört zurückgegeben.

Parameters:
principal - - Ein Principal desen Rechte ausgelesen werden sollen.
Returns:
Eine Enumeration mit allen Rechten der Gruppe(n) zu denen der Principal gehoert.

getGroupNegative

public Enumeration getGroupNegative(Principal principal)
Gibt eine Enumeration mit allen entzogenen Rechten der Gruppe zurück zu der der Principal gehört. Falls der Principal zu mehreren Gruppen gehört werden die entzogenen Rechte aller Gruppen zu denen der Principal gehört zurückgegeben.

Parameters:
principal - Ein Principal dessen entzogene Rechte ausgelesen werden sollen.
Returns:
Eine Enumeration mit allen entzogenen Rechten der Gruppe(n) zu denen der Principal gehoert..

getGroupPositive

public Enumeration getGroupPositive(Group g)
Gibt eine Enumeration mit allen erlaubten Rechten der übergebenen Gruppe zurück. Auch aus der Zugehörigkeit zu anderen Gruppen geerbte Berechtigungen werden mit zurück gegeben.

Parameters:
g - Eine Gruppe deren Rechte ausgelesen werden sollen.
Returns:
Eine Enumeration mit allen Rechten der Gruppe.

getGroupNegative

public Enumeration getGroupNegative(Group g)
Gibt eine Enumeration mit allen entzogenen Rechten der Gruppe zurück. Auch aus der Zugehörigkeit zu anderen Gruppen geerbte entzogene Berechtigungen werden mit zurück gegeben.

Parameters:
g - Eine Gruppe deren entzogene Rechte ausgelesen werden sollen.
Returns:
Eine Enumeration mit allen entzogenen Rechten der Gruppe.

getIndividualPositive

public Enumeration getIndividualPositive(Principal principal)
Gibt eine Enumeration mit allen Rechten des Principals zurück.

Parameters:
principal - Ein Principal dessen Rechte ausgelesen werden sollen.
Returns:
Eine Enumeration mit allen Rechten des Principals.

getIndividualNegative

public Enumeration getIndividualNegative(Principal principal)
Gibt eine Enumeration mit allen entzogenen Rechten des Principals zurück.

Parameters:
principal - Ein Principal dessen entzogene Rechte ausgelesen werden sollen.
Returns:
Eine Enumeration mit allen entzogenen Rechten des Principals.