public final class AccessControlManager extends java.lang.Object implements RegionManager, java.io.Closeable
Klasse, die im Datenmodell Abfragen nach Benutzerberechtigungen erlaubt.
Modifier and Type | Field and Description |
---|---|
private java.util.HashMap<SystemObject,AccessControlUnit> |
_authenticationClassHashMap
Map, die Berechtigungsklassen den kapselnden AccessControlUnit-Klassen zuordnet
|
private ClientDavInterface |
_connection
Datenverteilerverbindung
|
private static Debug |
_debug
Debug
|
private boolean |
_isUsingNewDataModel
Ob das neue Datenmodell (siehe
ExtendedUserInfo ) benutzt wird |
private java.util.concurrent.LinkedBlockingQueue<java.lang.Long> |
_notifyUserChangedQueue |
private HashBagMap<DataState,DataLoader> |
_oldObjectsWithMissingParameters |
private java.util.Timer |
_parameterTimer |
private java.util.HashMap<SystemObject,Region> |
_regionHashMap
Map, die Regionen den kapselnden Region-Klassen zuordnet
|
private java.util.HashMap<SystemObject,Role> |
_roleHashMap
Map, die Rollen den kapselnden Role-Klassen zuordnet
|
private java.lang.Object |
_updateLock |
private boolean |
_useImplicitUserManagement
Ob implizite Benutzerverwaltung durchgeführt wird, oder Benutzer mit addUser erstellt werden müssen
|
private java.util.HashMap<java.lang.Long,UserInfoInternal> |
_userInfoHashMap
Map, die BenutzerIds den Benutzerobjekten zuordnet
|
private java.util.concurrent.locks.ReentrantReadWriteLock |
_userMapLock |
private UserRightsChangeHandler |
_userRightsChangeHandler
Callback, der aufgerufen wird, wenn sich die Rechte eines Benutzers ändern
|
static int |
MessageSenderInterval
Interval zwischen 2 Betriebsmeldungen wegen fehlenden Parametern.
|
private static java.lang.Long |
POISON
Spezielles Long, dass das Töten des Threads bewirkt.
|
Constructor and Description |
---|
AccessControlManager(ClientDavInterface connection,
UserRightsChangeHandler userRightsChangeHandler,
boolean useNewDataModel)
Erstellt eine neue Instanz des AccessControlManagers mit impliziter Benutzerverwaltung
|
AccessControlManager(ClientDavInterface connection,
UserRightsChangeHandler userRightsChangeHandler,
boolean useImplicitUserManagement,
boolean useNewDataModel)
Erstellt eine neue Instanz des AccessControlManagers
|
Modifier and Type | Method and Description |
---|---|
void |
addUser(long userId)
Fügt eine Benutzerinformation zu der Benutzertabelle hinzu, wenn der Datenverteiler die Benutzerrechte prüfen soll.
|
private UserInfo |
addUserInternal(long userId) |
void |
close() |
private void |
createParameterTimer() |
private UserInfoInternal |
createUserInfo(long userID)
Erstellt je nach Datenmodell-Version ein neues BenutzerInfo-Objekt das Abfragen auf die Berechtigungen eines Benutzers ermöglicht.
|
private java.util.List<DataLoader> |
enumerateChildren(DataLoader node)
Gibt alle Kindelemente eines Objekts zurück
|
private static java.lang.String |
formatMap(HashBagMap<DataState,DataLoader> objectsWithMissingParameters) |
(package private) AccessControlUnit |
getAuthenticationClass(SystemObject systemObject)
Gibt die AuthenticationClass-Klasse zurück die zu dem angeforderten Systemobjekt gehört.
|
private static HashBagMap<DataState,DataLoader> |
getObjectsWithMissingParameters(java.util.Collection<? extends DataLoader> values) |
Region |
getRegion(SystemObject systemObject)
Gibt die Region-Klasse zurück die zu dem angeforderten Systemobjekt gehört.
|
(package private) Role |
getRole(SystemObject systemObject)
Gibt die Role-Klasse zurück die zu dem angeforderten Systemobjekt gehört.
|
java.lang.Object |
getUpdateLock()
Um immer einen konsistenten Zustand zu haben, darf immer nur ein DataLoader gleichzeitig pro AccessControlManager geupdatet werden.
|
UserInfo |
getUser(long userId)
Gibt das gespeicherte BenutzerObjekt mit der angegebenen ID zurück
|
private boolean |
isChildOf(DataLoader parent,
DataLoader possibleChild)
Prüft ob ein Objekt wie eine Rolle oder eine Region von einem übergeordnetem Objekt wie einem Benutzer oder einer Berechtigungsklasse referenziert wird.
|
boolean |
isUsingNewDataModel()
Fragt ab, ob das neue Datenmodell benutzt wird.
|
protected void |
notifyInfiniteRecursion(DataLoader node,
DataLoader parent,
java.util.List<DataLoader> trace)
Wird aufgerufen, wenn eine Rekursion in den Systemobjekten gefunden wurde.
|
private void |
notifyUserRightsChangedAsync(java.lang.Long affectedUserId) |
void |
objectChanged(DataLoader object)
Wird aufgerufen un dem AccessControlManager zu informieren, dass ein verwaltetes Objekt sich geändert hat.
|
void |
removeUser(long userId)
Löscht einen Benutzer aus der Benutzertabelle, wenn der Datenverteiler die Benutzerrechte prüfen soll.
|
private void |
sendMessagesAboutMissingParameters() |
java.lang.String |
toString() |
(package private) void |
userChanged(UserInfoInternal userInfo)
Wird aufgerufen un dem AccessControlManager zu informieren, dass ein Benutzer sich geändert hat.
|
private static final Debug _debug
Debug
public static final int MessageSenderInterval
Interval zwischen 2 Betriebsmeldungen wegen fehlenden Parametern. Außerdem die Zeit, die mindestens vergangen sein muss, bis ein fehlender Parameterdatensatz gemeldet wird. Bei der Anpassung der Zeit muss möglicherweise der Wortlaut der Betriebsmeldung geändert werden.
private static final java.lang.Long POISON
Spezielles Long, dass das Töten des Threads bewirkt.
private final java.util.HashMap<java.lang.Long,UserInfoInternal> _userInfoHashMap
Map, die BenutzerIds den Benutzerobjekten zuordnet
private final java.util.HashMap<SystemObject,AccessControlUnit> _authenticationClassHashMap
Map, die Berechtigungsklassen den kapselnden AccessControlUnit-Klassen zuordnet
private final java.util.HashMap<SystemObject,Role> _roleHashMap
Map, die Rollen den kapselnden Role-Klassen zuordnet
private final java.util.HashMap<SystemObject,Region> _regionHashMap
Map, die Regionen den kapselnden Region-Klassen zuordnet
private final ClientDavInterface _connection
Datenverteilerverbindung
private final boolean _isUsingNewDataModel
Ob das neue Datenmodell (siehe ExtendedUserInfo
) benutzt wird
private final UserRightsChangeHandler _userRightsChangeHandler
Callback, der aufgerufen wird, wenn sich die Rechte eines Benutzers ändern
private final boolean _useImplicitUserManagement
Ob implizite Benutzerverwaltung durchgeführt wird, oder Benutzer mit addUser erstellt werden müssen
private final java.lang.Object _updateLock
private final java.util.concurrent.locks.ReentrantReadWriteLock _userMapLock
private HashBagMap<DataState,DataLoader> _oldObjectsWithMissingParameters
private final java.util.concurrent.LinkedBlockingQueue<java.lang.Long> _notifyUserChangedQueue
private java.util.Timer _parameterTimer
public AccessControlManager(ClientDavInterface connection, UserRightsChangeHandler userRightsChangeHandler, boolean useNewDataModel)
Erstellt eine neue Instanz des AccessControlManagers mit impliziter Benutzerverwaltung
connection
- Verbindung zum DatenverteileruserRightsChangeHandler
- Klasse, die über Änderungen an den Benutzerrechten informiert werden soll. Das ist im allgemeinen der HighLevelSubscriptionsManager
, der bei sich ändernden Rechten eventuell ungültig gewordene Anmeldungen deaktiviert, kann aber für Testfälle und andere Anwendungen auch ein anderes (möglicherweise deutlich kleineres) Objekt sein.useNewDataModel
- Sollen die neuen Zugriffsrechte benutzt werden?public AccessControlManager(ClientDavInterface connection, UserRightsChangeHandler userRightsChangeHandler, boolean useImplicitUserManagement, boolean useNewDataModel)
Erstellt eine neue Instanz des AccessControlManagers
connection
- Verbindung zum DatenverteileruserRightsChangeHandler
- Klasse, die über Änderungen an den Benutzerrechten informiert werden soll. Das ist im allgemeinen der HighLevelSubscriptionsManager
, der bei sich ändernden Rechten eventuell ungültig gewordene Anmeldungen deaktiviert, kann aber für Testfälle und andere Anwendungen auch ein anderes (möglicherweise deutlich kleineres) Objekt sein.useImplicitUserManagement
- Wenn false, werden nur Benutzer berücksichtigt, die mit addUser und removeUser in diese Klasse eingefügt werden.useNewDataModel
- Sollen die neuen Zugriffsrechte benutzt werden?private void createParameterTimer()
public void close()
close
in interface java.io.Closeable
close
in interface java.lang.AutoCloseable
private void sendMessagesAboutMissingParameters()
private static java.lang.String formatMap(HashBagMap<DataState,DataLoader> objectsWithMissingParameters)
private static HashBagMap<DataState,DataLoader> getObjectsWithMissingParameters(java.util.Collection<? extends DataLoader> values)
public java.lang.String toString()
toString
in class java.lang.Object
public final void addUser(long userId)
Fügt eine Benutzerinformation zu der Benutzertabelle hinzu, wenn der Datenverteiler die Benutzerrechte prüfen soll. Existiert der Benutzer bereits, wird lediglich die interne Referenz inkrementiert.
userId
- BenutzerIDprivate UserInfo addUserInternal(long userId)
private UserInfoInternal createUserInfo(long userID)
Erstellt je nach Datenmodell-Version ein neues BenutzerInfo-Objekt das Abfragen auf die Berechtigungen eines Benutzers ermöglicht.
userID
- benutzer-IDpublic boolean isUsingNewDataModel()
Fragt ab, ob das neue Datenmodell benutzt wird. Das neue Datenmodell enthält eine neue Struktur der Region und Rollen-Objekten und ermöglicht Beschränkungen bei der Erstellung von dynamischen Objekten.
protected void notifyInfiniteRecursion(DataLoader node, DataLoader parent, java.util.List<DataLoader> trace)
Wird aufgerufen, wenn eine Rekursion in den Systemobjekten gefunden wurde. Dabei wird eine _Debug-Meldung ausgegeben und das Elternelement angewiesen die Referenz auf das Kindobjekt zu deaktivieren.
node
- Der Knoten, der sich selbst referenziertparent
- Der Knoten, der den problematischen Knoten referenzierttrace
- Komplette Hierarchie vom Benutzer zum problematischen Objekt.AccessControlUnit getAuthenticationClass(SystemObject systemObject)
Gibt die AuthenticationClass-Klasse zurück die zu dem angeforderten Systemobjekt gehört.
systemObject
- Systemobjekt, das eine Berechtigungsklasse repräsentiertpublic Region getRegion(SystemObject systemObject)
Gibt die Region-Klasse zurück die zu dem angeforderten Systemobjekt gehört.
getRegion
in interface RegionManager
systemObject
- Systemobjekt, das eine Region repräsentiertRole getRole(SystemObject systemObject)
Gibt die Role-Klasse zurück die zu dem angeforderten Systemobjekt gehört.
systemObject
- Systemobjekt, das eine Rolle repräsentiertpublic UserInfo getUser(long userId)
Gibt das gespeicherte BenutzerObjekt mit der angegebenen ID zurück
userId
- Angegebene BenutzerIdprivate boolean isChildOf(DataLoader parent, DataLoader possibleChild)
Prüft ob ein Objekt wie eine Rolle oder eine Region von einem übergeordnetem Objekt wie einem Benutzer oder einer Berechtigungsklasse referenziert wird.
parent
- Mögliches VaterobjektpossibleChild
- Möglichen Kindobjektpublic final void removeUser(long userId)
Löscht einen Benutzer aus der Benutzertabelle, wenn der Datenverteiler die Benutzerrechte prüfen soll. Wenn die interne Referenz eines Benutzers 0 ist, dann wird die Benutzerinformation aus der Tabelle entfernt.
userId
- BenutzerIDpublic void objectChanged(DataLoader object)
Wird aufgerufen un dem AccessControlManager zu informieren, dass ein verwaltetes Objekt sich geändert hat. Der AccessControlManager wird daraufhin nach Benutzer-Objekten suchen, die dieses Objekt verwenden und an den HighLevelSubscriptionsManager
eine Benachrichtigung senden, dass sich die Rechte des Benutzers geändert haben und eventuelle vorhandene Anmeldungen entfernt werden müssen.
objectChanged
in interface RegionManager
object
- Objekt das sich geändert hatprivate void notifyUserRightsChangedAsync(java.lang.Long affectedUserId)
void userChanged(UserInfoInternal userInfo)
Wird aufgerufen un dem AccessControlManager zu informieren, dass ein Benutzer sich geändert hat. Der AccessControlManager wird daraufhin die referenzierten Kindobjekte (Rollen, Regionen etc.) auf Rekursion überprüfen und an den HighLevelSubscriptionsManager
eine Benachrichtigung senden, dass sich die Rechte des Benutzers geändert haben und eventuelle vorhandene Anmeldungen entfernt werden müssen.
userInfo
- Benutzerobjekt, das sich geändert hatprivate java.util.List<DataLoader> enumerateChildren(DataLoader node)
Gibt alle Kindelemente eines Objekts zurück
node
- Objekt das nach Kindelementen gefragt wirdpublic java.lang.Object getUpdateLock()
Um immer einen konsistenten Zustand zu haben, darf immer nur ein DataLoader gleichzeitig pro AccessControlManager geupdatet werden. Dazu wird auf dieses dummy-Objekt synchronisiert
getUpdateLock
in interface RegionManager