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 Closeableclose in interface AutoCloseableprivate 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 RegionManagersystemObject - 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 RegionManagerobject - 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