public final class AccessControlManager extends Object implements RegionManager, Closeable
Modifier and Type | Field and Description |
---|---|
private 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 LinkedBlockingQueue<Long> |
_notifyUserChangedQueue |
private HashBagMap<DataState,DataLoader> |
_oldObjectsWithMissingParameters |
private Timer |
_parameterTimer |
private HashMap<SystemObject,Region> |
_regionHashMap
Map, die Regionen den kapselnden Region-Klassen zuordnet
|
private HashMap<SystemObject,Role> |
_roleHashMap
Map, die Rollen den kapselnden Role-Klassen zuordnet
|
private Object |
_updateLock |
private boolean |
_useImplicitUserManagement
Ob implizite Benutzerverwaltung durchgeführt wird, oder Benutzer mit addUser erstellt werden müssen
|
private HashMap<Long,UserInfoInternal> |
_userInfoHashMap
Map, die BenutzerIds den Benutzerobjekten zuordnet
|
private 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 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 List<DataLoader> |
enumerateChildren(DataLoader node)
Gibt alle Kindelemente eines Objekts zurück
|
private static 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(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.
|
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,
List<DataLoader> trace)
Wird aufgerufen, wenn eine Rekursion in den Systemobjekten gefunden wurde.
|
private void |
notifyUserRightsChangedAsync(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() |
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
public static final int MessageSenderInterval
private static final Long POISON
private final HashMap<Long,UserInfoInternal> _userInfoHashMap
private final HashMap<SystemObject,AccessControlUnit> _authenticationClassHashMap
private final HashMap<SystemObject,Role> _roleHashMap
private final HashMap<SystemObject,Region> _regionHashMap
private final ClientDavInterface _connection
private final boolean _isUsingNewDataModel
ExtendedUserInfo
) benutzt wirdprivate final UserRightsChangeHandler _userRightsChangeHandler
private final boolean _useImplicitUserManagement
private final Object _updateLock
private final ReentrantReadWriteLock _userMapLock
private HashBagMap<DataState,DataLoader> _oldObjectsWithMissingParameters
private final LinkedBlockingQueue<Long> _notifyUserChangedQueue
private Timer _parameterTimer
public AccessControlManager(ClientDavInterface connection, UserRightsChangeHandler userRightsChangeHandler, boolean useNewDataModel)
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)
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 Closeable
close
in interface AutoCloseable
private void sendMessagesAboutMissingParameters()
private static String formatMap(HashBagMap<DataState,DataLoader> objectsWithMissingParameters)
private static HashBagMap<DataState,DataLoader> getObjectsWithMissingParameters(Collection<? extends DataLoader> values)
public final void addUser(long userId)
userId
- BenutzerIDprivate UserInfo addUserInternal(long userId)
private UserInfoInternal createUserInfo(long userID)
userID
- benutzer-IDpublic boolean isUsingNewDataModel()
protected void notifyInfiniteRecursion(DataLoader node, DataLoader parent, List<DataLoader> trace)
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)
systemObject
- Systemobjekt, das eine Berechtigungsklasse repräsentiertpublic Region getRegion(SystemObject systemObject)
getRegion
in interface RegionManager
systemObject
- Systemobjekt, das eine Region repräsentiertRole getRole(SystemObject systemObject)
systemObject
- Systemobjekt, das eine Rolle repräsentiertpublic UserInfo getUser(long userId)
userId
- Angegebene BenutzerIdprivate boolean isChildOf(DataLoader parent, DataLoader possibleChild)
parent
- Mögliches VaterobjektpossibleChild
- Möglichen Kindobjektpublic final void removeUser(long userId)
userId
- BenutzerIDpublic void objectChanged(DataLoader object)
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(Long affectedUserId)
void userChanged(UserInfoInternal userInfo)
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 List<DataLoader> enumerateChildren(DataLoader node)
node
- Objekt das nach Kindelementen gefragt wirdpublic Object getUpdateLock()
getUpdateLock
in interface RegionManager