CX_CLASS_SECURITY
Klassenhierarchie
- CX_CLASS
- CX_SECURITY
- CX_CLASS_SECURITY
- CX_SECURITY
Beschreibung:
Für alle Objekte einer Klasse werden Zugriffsrechte festgelegt. Die Schreib- und Leserechte gelten zunächst für alle Datenfelder (einschließlich dynamischer Datenfelder) der Klasse. Für bestimmte Zugriffsausdrücke können mit Objekten der Klasse CX_ATTRIBUTE_SECURITY hiervon abweichende Rechte definiert werden (Feld accessExpressions)
Für Funktionsaufrufe und Indizes gelten folgende zusätzliche Verallgemeinerungen:
Objekte der Klasse CX_CLASS_SECURITY beschreiben die Zugriffsrechte für eine Menge von Objekten. Das Datenfeld specializations verweist auf (untergeordnete) Security-Objekte mit abweichenden Festlegungen für Teilmengen (z.B. für abgeleitete Klassen oder für ausgewählte Instanzen einer Klasse). Die untergeordneten Security-Objekte werden nur dann ausgewertet, wenn schon das übergeordnete Objekt bereits eine Aussage liefern könnte.
Beispiel:
Es existieren die Klassen A, A1, A2 und B, wobei A1 und A2 von A abgeleitet sind:
Ein CX_CLASS_SECURITY-Objekt für A - Bit flag 4 sei 0 - beschreibt die Zugriffsrechte für alle Objekte der Klassen A, A1 und A2: Objektmenge MA. Für Objekte der Klasse A1 sollen abweichende Rechte gelten (Menge MA1). Wegen MA > MA1 beschreibt das entsprechende Security-Objekt eine Spezialisierung und kann dem Security-Objekt für A untergeordnet werden. Das gleiche gilt für ein Objekt der Klasse CX_OBJECT_SECURITY, das sich auf ausgewählte Instanzen von A1 bezieht: MA > MA1> MObjects. Dagegen ist es sinnlos, ein Security-Objekt für Klasse B als Spezialisierung des Objekts für A aufzufassen: MB ist keine Teilmenge von MA.
Falls in specializations mehrere Security-Objekte für eine Klasse/Objekt zuständig sind, gewinnt das letzte Objekt. Das Verhalten war vor Dll-Version 225901 anders.
Code-Beispiel:
CreatePersObject(CX_CLASS_SECURITY) -> securityObject String(CX_CLASS_SECURITY::name, 150, 4, 220) Enum(CX_CLASS_SECURITY::objectClassID, 150, 14, 220, 50, "GetClassNames()") Checkbox(CX_CLASS_SECURITY::flags[4], 360, 16, 140, T("Ohne Vererbung", "Without inheritance"))
Funktion | MA* | Parameter | Rückgabe | Kurzbeschreibung |
---|---|---|---|---|
ClassName | STRING | Klassename | ||
Register | Security-Objekt anmelden | |||
TestClass 225901 |
INTEGER | CX_BIT_PATTERN | Liefert den Klassenzugriff für eine spezifische Klasse | |
TestMessage 225661 |
INTEGER | TRUE/FALSE | Test, ob Message erlaubt oder gesperrt wird | |
TestObject 225901 |
OBJECT, STRING | CX_BIT_PATTERN | Liefert den Objektzugriff für ein spezifisches Objekt (+ Pfad) | |
TestOption 225735 |
INTEGER | TRUE/FALSE | Test, ob Option erlaubt oder gesperrt wird. |
* MA = Member-Access-Funktion
Datenfeld | Typ | Referenz-Klasse | I* | Kurzbeschreibung | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
specializations | COLL | CX_SECURITY | untergeordnete Security-Objekte | |||||||||||||
name | STRING | Beschreibung | ||||||||||||||
accessExpressions | COLL | CX_ATTRIBUTE_SECURITY | Objekte der Klasse CX_ATTRIBUTE_SECURITY | |||||||||||||
objectClassID | ENUMSHORT | identifiziert die Klasse, für die Zugriffsrechte definiert werden. | ||||||||||||||
flags | INTEGER |
|
* I = Indizierbares Datenfeld
Modul | Kurzbeschreibung |
---|---|
secclass.mod | Zugriffsrechte für Klassen Editiermodul |