Permessi e diritti sugli oggetti protetti
- Tipo non definito
Questo documento presenta il modello di sicurezza basato su oggetti del server: oggetti sicuri, permessi, flag mask, permessi e rifiuti, gruppi, condivisioni interne e permessi forniti durante l'installazione.
1. Panoramica
Il sistema risponde alla seguente domanda:
Un dato utente ha un permesso dato su un determinato oggetto business?
Collega quattro concetti.
| Concetto | Classe principale | Ruolo |
|---|---|---|
| Beneficiario | DomainSecurityObject |
Un utente, un gruppo o un altro principio di sicurezza a cui può essere assegnato un diritto. |
| Bersaglio | SecurizedObject |
Un riferimento di sicurezza all'oggetto commerciale protetto. |
| Permesso | Permission |
Un'azione testabile per un tipo di oggetto, rappresentata da una maschera di bit. |
| Diritto | Right |
Associarsi tra un destinatario e un bersaglio, con una maschera consentita e una disapprovata. |
Un diritto può quindi essere letto come segue:
Il gruppo
OperatorsRiceve bandiere autorizzate0x13e bandiere rifiutate0x04sull'attrezzatura 42.
Il server non cerca solo un diritto direttamente portato dall'utente. Tiene anche conto delle sue appartenenze ai gruppi, inclusi i gruppi annidati. Un rifiuto applicabile viene valutato prima delle autorizzazioni.
2. Il principio di SecurizedObject
2.1 Un riferimento di sicurezza, non l'oggetto aziendale
SecurizedObject è una voce leggera nel modello di sicurezza che designa un bersaglio con due valori:
| Proprietà | Significato |
|---|---|
Identifier |
L'identificatore dell'istanza aziendale. |
ObjectType |
Un identificatore stabile del suo tipo, solitamente un valore di ImmersiveObjectType. |
La vera chiave è la coppia (Identifier, ObjectType). Ad esempio:
| Oggetto di Lavoro | ObjectType |
Identifier |
Bersaglio di sicurezza |
|---|---|---|---|
| Mappa 48 | Map, oppure 15 |
48 |
(48, 15) |
| Ambito di supervisione 48 | SupervisionScope, oppure 48 |
48 |
(48, 48) |
Il numero 48 può quindi essere simultaneamente un identificatore di istanza e un identificatore di tipo. Queste due informazioni devono sempre essere visualizzate e trasmesse separatamente.
Per ulteriori informazioni, consulta il Catalogo ImmersiveObjectType.
2.2 Relazione con l'oggetto aziendale
Il SecurizedObject non contiene il nome, la descrizione o le proprietà aziendali. È un puntatore a un oggetto sicuro ospitato altrove. SecurizedObject Porta solo la collezione di Right applicabile al target. L'oggetto di business rimane nel proprio database.
Questa separazione permette al motore di sicurezza di proteggere più famiglie di oggetti senza dipendere dalle loro classi concrete.
2.3 Quando un tipo è considerato sicuro?
Il calcolo centrale include il Permission di SecurizedObjectTypeQuando non esistono permessi per un tipo, il sistema di sicurezza considera che questo tipo non richieda il filtraggio dei diritti. Gli oggetti di questo tipo sono quindi accessibili senza limitazioni e controlli di sicurezza.
Quando almeno un permesso è configurato, il tipo entra nel calcolo di sicurezza che valuta i permessi di ciascun target richiesto in termini di permessi e divieti accanto al beneficiario.
L'utente Cerebrate ha accesso completo di base.
Una business class non è automaticamente protetta. Devi attivare la sicurezza sul suo tipo e configurarne i permessi, oltre a creare o applicare i diritti sulle sue istanze.
3. Il principio del permesso
A Permission descrive un'azione nota per un tipo di oggetto. Non fornisce l'accesso autonomamente. Fornisce il vocabolario usato da Right e dai controllori.
| Proprietà | Ruolo |
|---|---|
Identifier |
L'identificatore del permesso nel suo tipo oggetto. La chiave EF completa è (Identifier, SecurizedObjectType). |
SecurizedObjectType |
Il tipo di oggetto a cui si applica il permesso. Un permesso di carta non deve essere usato sull'apparecchiatura. |
Name |
Il nome mostrato e usato per comprendere l'azione. |
Description |
Spiegazione funzionale del permesso. |
Flag |
Maschera che deve essere presente in AuthorizedFlags concedere il permesso. |
DeniedFlag |
Maschera cercata DeniedFlags. Quando è assente, il server usa Flag. |
Il nome e la descrizione di un permesso esistente possono cambiare. Suono Flag e il suo DeniedFlag sono volontariamente immutabili nell'amministrazione quotidiana.
I diritti registrati non memorizzano l'identificatore di ogni permesso selezionato. Memorizzano solo maschere numeriche. Modificare la maschera di un permesso esistente cambierebbe retroattivamente il significato di tutti i diritti già registrati. Per evolvere una maschera, devi creare un nuovo permesso, migrare i diritti e poi rimuovere il vecchio permesso quando nessun diritto lo usa più.
4. Capire le bandiere
4.1 Una maschera di Bit
Un flag è un intero in cui ogni bit rappresenta un'abilità elementare. L'operatore binario OU, scritto |, combina diversi valori.
| Espressione | Decimale | Esadecimale | Bit posizionati |
|---|---|---|---|
1 |
1 |
0x1 |
bit 0 |
0x3 |
3 |
0x3 |
bit 0 e 1 |
1 | 5 |
5 |
0x5 |
bit 0 e 2 |
0x3 | 65 |
67 |
0x43 |
bit 0, 1 e 6 |
Il tester modale di permesso accetta tutte e quattro queste forme.
4.2 Test di un permesso autorizzato
Un permesso è consentito quando tutti i bit di suono Flag sono presenti in AuthorizedFlags :
(authorizedFlags & permission.Flag) == permission.Flag
Esempi con permessi di mappa:
AuthorizedFlags del beneficiario |
Permesso testato | Flag Richiesto |
Risultato |
|---|---|---|---|
0x3 |
See Map |
0x3 |
Permesso. |
0x3 |
Modify Map |
0x5 |
Rifiutato: il bit 0x4 mancante. |
0x43 |
See Map |
0x3 |
Permesso. |
0x43 |
Edit All |
0x40 |
Permesso. |
0x43 |
Modify Map |
0x5 |
Rifiutato: il bit 0x4 mancante. |
4.3 Bandierine singole e composite
Non tutti i valori del catalogo sono potenze indipendenti di due. Diversi permessi utilizzano una maschera composita che include un pad di lettura:
3, oppure1 | 2;5, oppure1 | 4;11, oppure1 | 2 | 8;19, oppure1 | 2 | 16;35, oppure1 | 2 | 32.
Pertanto, autorizzazione See Map con la maschera 3 consente anche il Read Map con la maschera 1. D'altra parte, Modify Map con la maschera 5 non include il 2 di See Map.
Esempio

Come leggere questa immagine
Un numero binario si scrive solo con 0 e 1 :
0Significa che la capacità della colonna è disabilitata.1significa che la capacità della colonna è abilitata.
Partendo da destra, ogni colonna vale il doppio rispetto alla precedente:
| Posizione binaria | 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|---|---|---|---|---|---|---|---|---|
| Valore quando il bit è attivo | 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
Per scoprire il valore decimale, basta sommare le colonne contenenti 1.
Esempio dettagliato: perché 35 vale 100011
Il numero 35 Abilita le colonne 32, 2 e 1 :
| Valore della colonna | 128 |
64 |
32 |
16 |
8 |
4 |
2 |
1 |
|---|---|---|---|---|---|---|---|---|
Un po' di 35 |
0 |
0 |
1 |
0 |
0 |
0 |
1 |
1 |
Otteniamo quindi:
35 = 32 + 2 + 1
35 = 00100011 en binaire
Lo stesso calcolo può essere presentato come un semplice assemblaggio di flag con l'operatore | :
32 = 00100000
2 = 00000010
1 = 00000001
---------------- OU binaire
35 = 00100011
L'operatore | quindi mantiene ogni bit attivo incontrato. Non concatena i numeri: crea una maschera contenente tutte le capacità selezionate.
Leggere le altre righe
| Decimale | Decomposizione | Scrittura binaria a 8 bit |
|---|---|---|
3 |
2 + 1 |
00000011 |
5 |
4 + 1 |
00000101 |
11 |
8 + 2 + 1 |
00001011 |
19 |
16 + 2 + 1 |
00010011 |
35 |
32 + 2 + 1 |
00100011 |
Nell'immagine, ogni riquadro colorato corrisponde a un 1. Una scatola grigia corrisponde a un 0. Un permesso composito richiede che tutte le sue caselle colorate siano attive anche nei permessi dell'utente.
Ad esempio, il permesso di test 35 è lo stesso che verificare che i diritti contengano i bit 32, 2 e 1 :
(droits & 35) == 35
Se manca solo uno di questi tre bit, il 35 non viene concesso.
I valori 32, 2 e 1 corrispondono a tre permessi, quindi 35 li attiva tutti.
Alcuni permessi, inclusi come standard in Immersive, coprono tutti i bit di basso peso necessari per indirizzare tutti i permessi.
| Maschera | Valore | Uso comune |
|---|---|---|
0xF |
15 |
Spazio di lavoro, cartella e SupervisionScope. Copre le quattro parti a basso peso. |
0xFFFFFF |
16777215 |
Mappa, WorldView e Attrezzature. Copre i ventiquattro pezzi a basso peso. |
FullControl non è una parola chiave speciale del motore. È un permesso ordinario la cui maschera contiene le abilità previste per il tipo. Se un permesso futuro utilizza un po' esterno alla maschera FullControl, non sarà automaticamente incluso.
5. AuthorizedFlags, DeniedFlags e priorità di rifiuto
5.1 Contenuto di un Right
A Right Associa un beneficiario a un obiettivo:
| Proprietà | Significato |
|---|---|
DomainSecurityObjectIdentifier |
Gruppo di utenti o beneficiari. |
SecurizedObjectIdentifier |
L'identificatore dell'istanza protetta. |
SecurizedObjectType |
Il tipo di istanza protetta. |
AuthorizedFlags |
Maschera delle abilità concesse. |
DeniedFlags |
Si nasconde esplicitamente negando le abilità. |
Più permessi sono raggruppati in un unico diritto con l'operatore |.
right.AuthorizedFlags = existingAuthorizedFlags | permission.Flag;
right.DeniedFlags = existingDeniedFlags | deniedFlag;
Un valore assente è trattato come 0.
5.2 Ruolo di DeniedFlag
Per testare un rifiuto, il server utilizza:
int deniedFlag = permission.DeniedFlag ?? permission.Flag;
bool denied = (deniedFlags & deniedFlag) == deniedFlag;
Sulle mappe, i permessi compositi tipicamente hanno un DeniedFlag elementare. Per esempio, Modify Map Applicazione Flag = 5, o il 1 + 4, ma rifiuta con DeniedFlag = 4. Il bit di lettura comune quindi non deve essere ripetuto nella maschera di negazione.
5.3 Ordine decisionale
Il calcolo centrale segue il seguente ordine:
- Il cervello è consentito senza ulteriori calcoli.
- Il server risolve il target in base al suo ID e tipo.
- Cerca un declino che si applichi direttamente all'utente o a uno dei suoi gruppi.
- Se viene riscontrato un rifiuto, il risultato è immediatamente rifiutato.
- In assenza di un rifiuto, cerca un'autorizzazione diretta o un'autorizzazione ereditata da un gruppo.
- Una condivisione interna attiva può aggiungere permessi, ma mai bypassare un rifiuto esplicito.
- In assenza di autorizzazione esplicito, il risultato è Negato per default.
Un permesso portato da un gruppo non compensa un rifiuto effettuato da un altro gruppo. Se l'utente appartiene a entrambi i gruppi, il rifiuto vince.
L'amministrazione impedisce inoltre che un permesso simultaneamente consentito e negato venga memorizzato nella stessa mutazione. Flag negativi e bit sconosciuti per il tipo di oggetto vengono rifiutati.
6. Diritti diretti, gruppi, diritti automatici e condivisione
6.1 Diritto diretto
Il DomainSecurityObjectIdentifier di un Right può designare direttamente un utente. Il diritto allora avvantaggia solo quell'utente.
6.2 Diritto al gruppo
Il DomainSecurityObjectIdentifier di un Right può anche essere un gruppo. Il sistema di sicurezza attraversa le appartenenze in modo ricorsivo: un utente che è membro di un gruppo e di un altro gruppo eredita i diritti del gruppo genitore. Le credenziali visitate in precedenza vengono ricordate per evitare un ciclo infinito in presenza di un ciclo di gruppo.
6.3 Diritto Automatico
Uno stato di diritto automatico non costituisce un secondo meccanismo di autorizzazione. Quando un oggetto viene creato o regolarizzato, esso risolve il suo beneficiario e poi crea o completa un Right ordinario.
Le variabili attualmente previste nei nomi distinti sono:
{CurrentUserDistinguishedName};{SubDomainName};{SubDomainDistinguishedName}.
Una regola di autorizzazione aggiunge il Flag del suo permesso AuthorizedFlags. Una regola di negazione aggiunge il suo DeniedFlag, o il suo Flag In mancanza di ciò, DeniedFlags.
6.4 Condivisione Interna
Una condivisione a un utente o gruppo interno può aggiungere le flag che porta al calcolo centrale quando è attiva, non revocata, avviata e non scaduta.
La condivisione non permette:
- per eludere un rifiuto esplicito;
- amministrare a sua volta i diritti dell'oggetto;
- per introdurre una maschera che non esiste nel catalogo del tipo.
I link di condivisione esterni non partecipano al calcolo di autorizzazione di un utente autenticato.
7. Permessi aziendali di base forniti
Questa sezione descrive i permessi persistiti dalle migrazioni di installazione. Le etichette presentate da un'istanza possono quindi essere modificate in /Security/Configuration.
Le costanti C # GraphicStream.Immersive.Business.Security.Permissions forniscono oggetti comodi per i controller. Tuttavia, il database rimane la fonte di verità per il catalogo caricato nel Domain. Dovresti sempre selezionare un permesso con il tipo di oggetto e la maschera, non solo con il suo ID numerico.
7.1 Mappe — Map, tipo 15
| Permesso di base | Bandiera ammessa | Bandiera di rifiuto | Ruolo |
|---|---|---|---|
Read Map |
1 / 0x1 |
1 |
Leggi le proprietà della mappa. |
See Map |
3 / 0x3 |
2 / 0x2 |
Consulta il contenuto della mappa. |
Modify Map |
5 / 0x5 |
4 / 0x4 |
Modifica le proprietà della mappa. |
Edit Topography |
11 / 0xB |
8 / 0x8 |
Cambia la topografia. |
Edit Points of interest |
19 / 0x13 |
16 / 0x10 |
Gestisci i punti di interesse. |
Edit equipments |
35 / 0x23 |
32 / 0x20 |
Gestisci l'equipaggiamento posizionato sulla mappa. |
Edit All |
64 / 0x40 |
64 / 0x40 |
Gestisci globalmente i contenuti associati alla mappa. |
Full control on map |
16777215 / 0xFFFFFF |
Stessa maschera | Pieno controllo sulle capacità nei primi ventiquattro bit. |
7.2 Visioni del mondo — WorldView, tipo 25
| Permesso di base | Bandiera ammessa | Bandiera di rifiuto | Ruolo |
|---|---|---|---|
Read WorldView |
1 / 0x1 |
1 |
Leggi le proprietà della visione del mondo. |
See WorldView |
3 / 0x3 |
2 / 0x2 |
Guarda il contenuto della visione del mondo. |
Modify WorldView |
5 / 0x5 |
4 / 0x4 |
Modifica le sue proprietà. |
Edit WorldView |
11 / 0xB |
8 / 0x8 |
Modifica i contenuti associati alla visione del mondo. |
Full control on WorldView |
16777215 / 0xFFFFFF |
Stessa maschera | Controllo totale. |
7.3 Equipaggiamento — Equipment, tipo 18
| Permesso di base | Bandiera ammessa | Bandiera di rifiuto | Ruolo |
|---|---|---|---|
Read Equipment |
1 / 0x1 |
1 |
Leggi le proprietà dell'attrezzatura. |
See Equipment instances |
3 / 0x3 |
2 / 0x2 |
Visualizza le istanze dell'attrezzatura. |
Modify Equipment |
5 / 0x5 |
4 / 0x4 |
Modifica le proprietà dell'equipaggiamento. |
Edit Equipment instances |
11 / 0xB |
8 / 0x8 |
Modifica le istanze. |
ControlInstanceHandles |
19 / 0x13 |
16 / 0x10 |
Cambia i valori degli handle delle istanza. |
Full control on Equipment |
16777215 / 0xFFFFFF |
Stessa maschera | Controllo totale. |
7.4 Spazi di lavoro — Workspace, tipo 37
| Permesso di base | Bandiera ammessa | Bandiera di rifiuto | Ruolo |
|---|---|---|---|
See Workspace |
1 / 0x1 |
Stessa maschera | Rendi visibile lo spazio di lavoro. |
Read Workspace |
3 / 0x3 |
Stessa maschera | Leggi lo spazio di lavoro. |
Modify Workspace |
5 / 0x5 |
Stessa maschera | Modifica lo spazio di lavoro. |
Execute Workspace |
11 / 0xB |
Stessa maschera | Gestisci lo spazio di lavoro. |
Full control on Workspace |
15 / 0xF |
Stessa maschera | Pieno controllo dello spazio di lavoro. |
7.5 Record — Folder, tipo 38
| Permesso di base | Bandiera ammessa | Bandiera di rifiuto | Ruolo |
|---|---|---|---|
See folder |
1 / 0x1 |
Stessa maschera | Vedi il dossier. |
See folder content |
3 / 0x3 |
Stessa maschera | Consulta il contenuto. |
Modify folder |
5 / 0x5 |
Stessa maschera | Cambia nome e proprietà della cartella. |
Modify folder content |
11 / 0xB |
Stessa maschera | Aggiungi o modifica i suoi contenuti. |
Full control on folder |
15 / 0xF |
Stessa maschera | Leggi, modifica, popolare e cancellare la cartella. |
7.6 Ambiti di Supervisione — SupervisionScope, tipo 48
| Permesso di base | Bandiera ammessa | Bandiera di rifiuto | Ruolo |
|---|---|---|---|
See supervision scope |
1 / 0x1 |
Stessa maschera | Vedi l'ambito della supervisione. |
Read supervision scope |
3 / 0x3 |
Stessa maschera | Leggi il contenuto. |
Modify supervision scope |
7 / 0x7 |
Stessa maschera | Cambia ambito. |
Oversee supervision scope |
11 / 0xB |
Stessa maschera | Supervisiona gli elementi collegati al telescopio. |
Full control on supervision scope |
15 / 0xF |
Stessa maschera | Controllo totale. |
7.7 OrganizationalUnit, tipo 12
| Permesso | Bandiera | Ruolo descritto dal seme |
|---|---|---|
Read |
1 |
Leggi proprietà e soci. |
Modify |
3 |
Modifica proprietà o metadati. |
Manage |
5 |
Aggiungi o rimuovi i membri. |
FullControl |
16777215 / 0xFFFFFF |
Controllo totale. |
8. Esempio completo di calcolo
Consideriamo la mappa Identifier = 42, quindi il bersaglio (42, Map).
- Il gruppo
MapEditorshaAuthorizedFlags = 0x5: i suoi membri hannoRead MapeModify Map. - Il gruppo
MapViewershaAuthorizedFlags = 0x3: i suoi membri hannoRead MapeSee Map. - Il gruppo
RestrictedMapshaDeniedFlags = 0x4: i suoi membri sono rifiutatiModify Map, la cuiDeniedFlagvale4. - Alice appartiene a tutti e tre i gruppi.
Risultato:
| Permesso testato | Risultato | Spiegazione |
|---|---|---|
Read Map |
Permesso | Gruppi MapEditors e MapViewers contenere il flag richiesto 1. |
See Map |
Permesso | MapViewers contiene la maschera autorizzata 3 e nessun rifiuto 2 non si applica. |
Modify Map |
Rifiutato | MapEditors Permette le mascherine 5, ma RestrictedMaps Rifiuta il morso 4. Il rifiuto ha la priorità. |
Edit Topography |
Negato per default | Nessun dovere applicabile contiene la maschera autorizzata 11. |
9. Regole da ricordare
- A
Permissiondescrive un'azione; aRightConcede o nega la richiesta su un bersaglio. - A
SecurizedObjectviene identificato dalla coppia tipo e identificatore. - Le bandiere possono essere combinate con
|e si mettono alla prova con&. - Un permesso composito richiede tutti i bit di suono
Flag. DeniedFlagpuò essere diverso daFlagper isolare la parte che viene effettivamente negata.- Qualsiasi rifiuto diretto o ereditato guadagna rispetto ai permessi.
- Senza l'autorizzazione applicabile, l'accesso viene negato.
- I gruppi annidati passano i diritti.
- I compiti automatici producono
RightNormali. - Una condivisione interna può aggiungere accesso, ma mai sovrascrivere un rifiuto.
- La maschera di un permesso esistente non deve essere modificata dopo l'uso.