Azure-beli szerepkör-hozzárendelés feltételeinek formátuma és szintaxisa

A feltétel egy opciónálisan hozzáadható további ellenőrzés, amelyet a szerepkör-hozzárendeléshez adhat, hogy részletesebb hozzáférés-vezérlést biztosítson. Hozzáadhat például egy feltételt, amely megköveteli, hogy egy objektum egy adott címkével rendelkezzen az objektum olvasásához. Ez a cikk a szerepkör-hozzárendelési feltételek formátumát és szintaxisát ismerteti.

Feltételformátum

A szerepkör-hozzárendelési feltételek jobb megértése érdekében segít áttekinteni a formátumot.

Egyszerű feltétel

A legalapvetőbb feltétel egy célzott műveletből és egy kifejezésből áll. A művelet olyan művelet, amelyet a felhasználó végrehajthat egy erőforrástípuson. A kifejezés egy igaz vagy hamis értéket kiértékelő utasítás, amely meghatározza, hogy a művelet végrehajtható-e.

Az alábbiakban egy egyszerű feltétel formátuma látható.

Egyszerű feltétel formázása egyetlen művelettel és egyetlen kifejezéssel.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Az alábbi feltétel a "Blob olvasása" művelet. A kifejezés ellenőrzi, hogy a tároló neve blob-example-container-e.

(
    (
        !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'})
    )
    OR 
    (
        @Resource[Microsoft.Storage/storageAccounts/blobServices/containers:name]
        StringEquals 'blobs-example-container'
    )
)

Egy adott tárolónévvel rendelkező blobok olvasási hozzáférését bemutató ábra.

A feltétel kiértékelésének menete

Ha egy felhasználó olyan műveletet próbál végrehajtani a szerepkör-hozzárendelésben, amely nem <action>, akkor a !(ActionMatches) kiértékelése igaz, és az általános feltétel is igazra értékelődik, hogy lehetővé tegye a művelet végrehajtását.

Ha egy felhasználó megpróbálja végrehajtani <action> a szerepkör-hozzárendelést, !(ActionMatches) hamis értékre értékel, így a kifejezés kiértékelése történik. Ha a kifejezés igaz értéket ad vissza, az általános feltétel igaz értéket ad, hogy lehetővé tegye <action> a végrehajtást. <action> Ellenkező esetben nem végezhető el.

Az alábbi pszeudokód egy másik módszert mutat be, amellyel elolvashatja ezt a feltételt.

if a user tries to perform an action in the role assignment that does not match <action>
{
    Allow action to be performed
}
else
{
    if <attribute> <operator> <value> is true
    {
        Allow <action> to be performed
    }
    else
    {
        Do not allow <action> to be performed
    }
}

Aloperációk

Egyes műveletek alműveletekkel rendelkeznek. Az adatművelet például Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read a "Listablobok" alműveletet tartalmazza. Az alműveletekkel kapcsolatos feltételek formátuma a következő.

Alművelettel rendelkező művelet formázása.

(
    (
        !(ActionMatches{'<action>'}
        AND
        SubOperationMatches{'<subOperation>'})

    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Több művelet

Egy feltétel több olyan műveletet is tartalmazhat, amelyet engedélyezni szeretne, ha a feltétel igaz. Ha egyetlen feltételhez több műveletet is kiválaszt, előfordulhat, hogy kevesebb attribútum közül kell választania a feltételhez, mert az attribútumoknak elérhetőnek kell lenniük a kijelölt műveletek között.

Több művelet formázása, hogy engedélyezve legyen, ha a feltétel igaz.

(
    (
        !(ActionMatches{'<action>'})
        AND
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
    )
)

Több kifejezés

Egy feltétel több kifejezést is tartalmazhat. Az operátortól függően az attribútumok több értéken is ellenőrizhetők.

Több kifejezés formázása logikai operátorok és több érték használatával.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> {<value>, <value>, <value>}
        AND | OR
        <attribute> <operator> <value>
    )
)

Több feltétel

A feltételek kombinálásával több műveletet is megcélozhat.

Több feltétel formázása logikai operátor használatával.

(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> {<value>, <value>, <value>}
        AND | OR
        <attribute> <operator> <value>
    )
)
AND
(
    (
        !(ActionMatches{'<action>'})
    )
    OR
    (
        <attribute> <operator> <value>
        AND | OR
        <attribute> <operator> <value>
    )
)

Feltételszintaxis

Az alábbiakban egy szerepkör-hozzárendelési feltétel szintaxisa látható.

(
    (
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        ...
    )
    OR
    (
        <attribute> <operator> {<value, <value>, ...}
        AND | OR
        <attribute> <operator> {<value>, <value>, ...}
        AND | OR
        ...
    )
)
AND
(
    (
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        !(ActionMatches{'<action>'} AND SubOperationMatches{'<subOperation>'})
        AND
        ...
    )
    OR
    (
        <attribute> <operator> {<value, <value>, ...}
        AND | OR
        <attribute> <operator> {<value>, <value>, ...}
        AND | OR
        ...
    )
)
AND
...

Műveletek

Jelenleg olyan beépített vagy egyéni szerepkör-hozzárendelésekhez lehet feltételeket adni, amelyek blobtároló- vagy üzenetsortár-adatműveletekkel rendelkeznek. Ezek közé a következő beépített szerepkörök tartoznak:

A feltételek között használható tárolási műveletek listáját a következő témakörben találja:

Attribútumok

A kiválasztott műveletektől függően előfordulhat, hogy az attribútum különböző helyeken található. Ha egyetlen feltételhez több műveletet is kiválaszt, előfordulhat, hogy kevesebb attribútum közül kell választania a feltételhez, mert az attribútumoknak az összes kijelölt műveletben elérhetőnek kell lenniük. Attribútum megadásához a forrást előtagként kell megadnia.

Attribútumforrás Leírás Kód
Environment Az attribútum a kérelem környezetéhez van társítva, például a kérés hálózati eredetéhez vagy az aktuális dátumhoz és időponthoz.
@Environment
Megbízó Az attribútum egy egyéni biztonsági jellemző, amelyet a főszereplőhöz rendelnek, például egy felhasználóhoz vagy vállalati alkalmazáshoz (szolgáltatásnév). @Principal
Kérelem Az attribútum a műveletkérés része, például a blobindexcímke beállítása. @Request
Erőforrás Az attribútum az erőforrás tulajdonsága, például egy tároló neve. @Resource

A feltételekben használható tárolási attribútumok teljes listáját a következő témakörben találja:

Környezeti attribútumok

A környezeti attribútumok a hozzáférési kérések körülményeihez vannak társítva, például a nap és a nap időpontja vagy a hálózati környezet. A hálózati környezet lehet, hogy a hozzáférés egy adott privát végponton vagy egy virtuális hálózati alhálózaton keresztül történik, vagy akár bármilyen privát kapcsolaton keresztül.

Az alábbi táblázat a feltételek támogatott környezeti attribútumait sorolja fel.

Megjelenített név Leírás Attribútum Típus
Privát kapcsolat1 Ezt az attribútumot olyan feltételek mellett használhatja, amelyek bármilyen privát kapcsolaton keresztüli hozzáférést igényelnek. isPrivateLink Logikai érték
Privát végpont1,2 Ezt az attribútumot olyan feltételek között használhatja, amelyek egy adott privát végponton keresztüli hozzáférést korlátozzák. Microsoft.Network/privateEndpoints string
Alhálózat1,3 Használja ezt az attribútumot feltételek között egy adott alhálózathoz való hozzáférés korlátozásához. Microsoft.Network/virtualNetworks/subnets string
UTC most Használja ezt az attribútumot feltételek között az objektumokhoz való hozzáférés korlátozásához adott időszakokban. UtcNow DateTime

1 Másolási műveletek esetén a Is private link, Private endpointés Subnet attribútumok csak a célra vonatkoznak, az ilyen tárfiókra, a forrásra nem. A másolási műveletekkel kapcsolatos további információkért válassza ki a táblázat egyes attribútumait a további részletek megtekintéséhez.
2 Az attribútumot csak akkor használhatja Private endpoint , ha jelenleg legalább egy privát végpont van konfigurálva az előfizetésben.
3 Az attribútumot csak akkor használhatjaSubnet, ha jelenleg legalább egy virtuális hálózati alhálózattal rendelkezik az előfizetésben konfigurált szolgáltatásvégpontok használatával.

Fő attribútumok

A főbb attribútumok azok az egyéni biztonsági attribútumok, amelyeket az erőforráshoz hozzáférést kérő biztonsági főszereplőhöz rendelnek. A biztonsági tag lehet felhasználó vagy vállalati alkalmazás (szolgáltatásnév).

A fő attribútumok használatához a következőkre van szükség:

További információ az egyéni biztonsági attribútumokról:

Kérelem attribútumok

A kérelemattribútumok a hozzáférési kérelemben megadott feltételekhez vannak társítva, például a listázandó blobok megadott előtagjával.

Erőforrásattribútumok

Az erőforrásattribútumok ahhoz az objektumhoz vannak társítva, amelyhez hozzáférést kérnek, például a tárfiók nevét, a tároló nevét vagy azt, hogy engedélyezve van-e a hierarchikus névtér a tárfiókhoz.

Függvény operátorai

Ez a szakasz felsorolja a feltételek létrehozásához rendelkezésre álló függvényoperátorokat.

ActionMatches

Tulajdonság Érték
Operátor ActionMatches
Leírás Ellenőrzi, hogy az aktuális művelet megfelel-e a megadott műveleti mintának.
Példák ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'}
Ha az ellenőrzött művelet értéke "Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read", akkor igaz

ActionMatches{'Microsoft.Authorization/roleAssignments/*'}
Ha az ellenőrzött művelet értéke "Microsoft.Authorization/roleAssignments/write", akkor igaz

ActionMatches{'Microsoft.Authorization/roleDefinitions/*'}
Ha az ellenőrzött művelet értéke "Microsoft.Authorization/roleAssignments/write", akkor hamis

SubOperationMatches

Tulajdonság Érték
Operátor SubOperationMatches
Leírás Ellenőrzi, hogy az aktuális aloperáció megfelel-e a megadott alműködtetési mintának.
Példák SubOperationMatches{'Blob.List'}

Létezik

Tulajdonság Érték
Operátor Exists
Leírás Ellenőrzi, hogy létezik-e a megadott attribútum.
Példák Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:snapshot]
Az attribútumok támogatjákaz 1-et Titkosítási hatókör neve
Pillanatkép
Verzióazonosító

1 Az Exists operátor csak ezekhez az attribútumokhoz támogatott az Azure Portal vizualizációs ABAC-feltételkészítőjében. Az operátort Exists bármely attribútumhoz hozzáadhatja más eszközökkel, például a PowerShell, az Azure CLI, a REST API és a feltételkód-szerkesztő használatával az Azure Portalon.

Logikai operátorok

Ez a szakasz a feltételek létrehozásához elérhető logikai operátorokat sorolja fel.

És

Tulajdonság Érték
Operátorok AND
&&
Leírás És operátor.
Példák !(ActionMatches{'Microsoft.Storage/storageAccounts/blobServices/containers/blobs/read'} AND NOT SubOperationMatches{'Blob.List'})

Vagy

Tulajdonság Érték
Operátorok OR
||
Leírás Vagy operátor.
Példák @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z' OR NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId

Nem

Tulajdonság Érték
Operátorok NOT
!
Leírás Nem vagy negációs művelet.
Példák NOT Exists @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId]

Logikai összehasonlító operátorok

Ez a szakasz a feltételek létrehozásához elérhető logikai összehasonlító operátorokat sorolja fel.

Tulajdonság Érték
Operátorok BoolEquals
BoolNotEquals
Leírás Logikai összehasonlítás.
Példák @Resource[Microsoft.Storage/storageAccounts:isHnsEnabled] BoolEquals true

Sztring-összehasonlító operátorok

Ez a szakasz a feltételek létrehozásához elérhető sztring-összehasonlító operátorokat sorolja fel.

StringEquals

Tulajdonság Érték
Operátorok StringEquals
StringEqualsIgnoreCase
Leírás Kis- és nagybetű érzékeny (vagy kis- és nagybetű érzéketlen) egyeztetés. Az értékeknek pontosan meg kell egyezniük a karakterlánccal.
Példák @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] StringEquals 'Cascade'

StringNotEquals

Tulajdonság Érték
Operátorok StringNotEquals
StringNotEqualsIgnoreCase
Leírás StringEquals (vagy StringEqualsIgnoreCase) operátor tagadása.

KarakterláncKezdődikEzzel

Tulajdonság Érték
Operátorok StringStartsWith
StringStartsWithIgnoreCase
Leírás Kis- és nagybetű érzékeny (vagy kis- és nagybetű érzéketlen) egyeztetés. Az értékek a karakterlánccal kezdődnek.

NemKezdődik

Tulajdonság Érték
Operátorok StringNotStartsWith
StringNotStartsWithIgnoreCase
Leírás StringStartsWith (vagy StringStartsWithIgnoreCase) operátor tagadása.

StringLike

Tulajdonság Érték
Operátorok StringLike
StringLikeIgnoreCase
Leírás Kis- és nagybetű érzékeny (vagy kis- és nagybetű érzéketlen) egyeztetés. Az értékek tartalmazhatnak egy több karakterből álló helyettesítő karaktert (*) vagy egy egy karakterből álló helyettesítő karaktert (?) a sztring bármely pontján. Szükség esetén ezek a karakterek egy fordított perjel hozzáadásával, \* és \?, szökhetnek meg.
Példák @Resource[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:path] StringLike 'readonly/*'

Resource[name1] StringLike 'a*c?'
Ha az erőforrás[név1] értéke "abcd", akkor igaz

Resource[name1] StringLike 'A*C?'
Ha az erőforrás[név1] értéke "abcd", akkor hamis

Resource[name1] StringLike 'a*c'
Ha az erőforrás[név1] értéke "abcd", akkor hamis

StringNotLike

Tulajdonság Érték
Operátorok StringNotLike
StringNotLikeIgnoreCase
Leírás StringLike (vagy StringLikeIgnoreCase) operátor tagadása.

Numerikus összehasonlító operátorok

Ez a szakasz felsorolja a feltételek létrehozásához elérhető numerikus összehasonlító operátorokat.

Tulajdonság Érték
Operátorok NumericEquals
NumericNotEquals
NumericGreaterThan
NumericGreaterThanEquals
NumericLessThan
NumericLessThanEquals
Leírás Számegyezés. Csak egész számok támogatottak.

DateTime összehasonlító operátorok

Ez a szakasz felsorolja a feltételek létrehozásához elérhető dátum-idő összehasonlító operátorokat.

Tulajdonság Érték
Operátorok DateTimeEquals
DateTimeNotEquals
DateTimeGreaterThan
DateTimeGreaterThanEquals
DateTimeLessThan
DateTimeLessThanEquals
Leírás Teljes pontosságú ellenőrzés a következő formátumban: yyyy-mm-ddThh:mm:ss.mmmmmmmZ. A blob verzióazonosítójához, a blob pillanatképéhez és az aktuális UTC időhöz használatos.
Példák @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs:versionId] DateTimeEquals '2022-06-01T00:00:00.0Z'

GUID összehasonlító operátorok

Ez a szakasz a feltételek létrehozásához elérhető globálisan egyedi azonosító (GUID) összehasonlító operátorokat sorolja fel.

Tulajdonság Érték
Operátorok GuidEquals
GuidNotEquals
Leírás Kis- és nagybetűket nem megkülönböztető egyezés a következő formátummal: 00000000-0000-0000-0000-000000000000. Azonosításhoz használják olyan erőforrások esetében, mint például a fő azonosító vagy a szerepkör definíciójának azonosítója.
Példák

Termék-összehasonlító operátorok

Ez a szakasz felsorolja a termékek közötti összehasonlító operátorokat, amelyek feltételeket hozhatnak létre.

ForAnyOfAnyValues

Tulajdonság Érték
Operátorok ForAnyOfAnyValues:StringEquals
ForAnyOfAnyValues:StringEqualsIgnoreCase
ForAnyOfAnyValues:StringNotEquals
ForAnyOfAnyValues:StringNotEqualsIgnoreCase
ForAnyOfAnyValues:StringLike
ForAnyOfAnyValues:StringLikeIgnoreCase
ForAnyOfAnyValues:StringNotLike
ForAnyOfAnyValues:StringNotLikeIgnoreCase
ForAnyOfAnyValues:NumericEquals
ForAnyOfAnyValues:NumericNotEquals
ForAnyOfAnyValues:NumericGreaterThan
ForAnyOfAnyValues:NumericGreaterThanEquals
ForAnyOfAnyValues:NumericLessThan
ForAnyOfAnyValues:NumericLessThanEquals
ForAnyOfAnyValues:GuidEquals
ForAnyOfAnyValues:GuidNotEquals
Leírás Ha a bal oldalon legalább egy érték megfelel a jobb oldalon lévő legalább egy érték összehasonlításának, akkor a kifejezés igaz értéket ad vissza. Formátuma: ForAnyOfAnyValues:<BooleanFunction>. Több sztringet és számot támogat.
Példák @Resource[Microsoft.Storage/storageAccounts/encryptionScopes:name] ForAnyOfAnyValues:StringEquals {'validScope1', 'validScope2'}
Ha a titkosítási hatókör neve egyenlő validScope1 vagy validScope2, akkor igaz.

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'blue', 'green'}
igaz

{'red', 'blue'} ForAnyOfAnyValues:StringEquals {'orange', 'green'}
false

ForAllOfAnyValues

Tulajdonság Érték
Operátorok ForAllOfAnyValues:StringEquals
ForAllOfAnyValues:StringEqualsIgnoreCase
ForAllOfAnyValues:StringNotEquals
ForAllOfAnyValues:StringNotEqualsIgnoreCase
ForAllOfAnyValues:StringLike
ForAllOfAnyValues:StringLikeIgnoreCase
ForAllOfAnyValues:StringNotLike
ForAllOfAnyValues:StringNotLikeIgnoreCase
ForAllOfAnyValues:NumericEquals
ForAllOfAnyValues:NumericNotEquals
ForAllOfAnyValues:NumericGreaterThan
ForAllOfAnyValues:NumericGreaterThanEquals
ForAllOfAnyValues:NumericLessThan
ForAllOfAnyValues:NumericLessThanEquals
ForAllOfAnyValues:GuidEquals
ForAllOfAnyValues:GuidNotEquals
Leírás Ha a bal oldali összes érték megfelel legalább egy jobb oldali érték összehasonlításának, akkor a kifejezés igaz értéket ad vissza. Formátuma: ForAllOfAnyValues:<BooleanFunction>. Több sztringet és számot támogat.
Példák @Request[Microsoft.Storage/storageAccounts/blobServices/containers/blobs/tags:Project<$key_case_sensitive$>] ForAllOfAnyValues:StringEquals {'Cascade', 'Baker', 'Skagit'}

{'red', 'blue'} ForAllOfAnyValues:StringEquals {'orange', 'red', 'blue'}
igaz

{'red', 'blue'} ForAllOfAnyValues:StringEquals {'red', 'green'}
false

Bármelyik összes érték közül

Tulajdonság Érték
Operátorok ForAnyOfAllValues:StringEquals
ForAnyOfAllValues:StringEqualsIgnoreCase
ForAnyOfAllValues:StringNotEquals
ForAnyOfAllValues:StringNotEqualsIgnoreCase
ForAnyOfAllValues:StringLike
ForAnyOfAllValues:StringLikeIgnoreCase
ForAnyOfAllValues:StringNotLike
ForAnyOfAllValues:StringNotLikeIgnoreCase
ForAnyOfAllValues:NumericEquals
ForAnyOfAllValues:NumericNotEquals
ForAnyOfAllValues:NumericGreaterThan
ForAnyOfAllValues:NumericGreaterThanEquals
ForAnyOfAllValues:NumericLessThan
ForAnyOfAllValues:NumericLessThanEquals
ForAnyOfAllValues:GuidEquals
ForAnyOfAllValues:GuidNotEquals
Leírás Ha a bal oldalon legalább egy érték megfelel a jobb oldalon lévő összes érték összehasonlításának, akkor a kifejezés igaz értéket ad vissza. Formátuma: ForAnyOfAllValues:<BooleanFunction>. Több sztringet és számot támogat.
Példák {10, 20} ForAnyOfAllValues:NumericLessThan {15, 18}
igaz

ForAllOfAllValues

Tulajdonság Érték
Operátorok ForAllOfAllValues:StringEquals
ForAllOfAllValues:StringEqualsIgnoreCase
ForAllOfAllValues:StringNotEquals
ForAllOfAllValues:StringNotEqualsIgnoreCase
ForAllOfAllValues:StringLike
ForAllOfAllValues:StringLikeIgnoreCase
ForAllOfAllValues:StringNotLike
ForAllOfAllValues:StringNotLikeIgnoreCase
ForAllOfAllValues:NumericEquals
ForAllOfAllValues:NumericNotEquals
ForAllOfAllValues:NumericGreaterThan
ForAllOfAllValues:NumericGreaterThanEquals
ForAllOfAllValues:NumericLessThan
ForAllOfAllValues:NumericLessThanEquals
ForAllOfAllValues:GuidEquals
ForAllOfAllValues:GuidNotEquals
Leírás Ha a bal oldalon lévő összes érték megfelel a jobb oldalon lévő összes érték összehasonlításának, akkor a kifejezés igaz értéket ad vissza. Formátuma: ForAllOfAllValues:<BooleanFunction>. Több sztringet és számot támogat.
Példák {10, 20} ForAllOfAllValues:NumericLessThan {5, 15, 18}
false

{10, 20} ForAllOfAllValues:NumericLessThan {25, 30}
igaz

{10, 20} ForAllOfAllValues:NumericLessThan {15, 25, 30}
false

Speciális karakterek

Karakter Leírás
* A csillag (*) egy több karaktert átfogó jokerként működik, amely Like operátorokkal használható. Szükség esetén egy backslash \* hozzáadásával elkerülheti a csillagot.
? A kérdőjel (?) egy egy karakterből álló helyettesítő karaktert jelöl, amely operátorokkal Like használható. Szükség esetén egy fordított perjel \?hozzáadásával elkerülheti a kérdőjeleket.
$ A címkekulcsok kijelöléséhez egy dollárjelet ($) használunk. Az Azure PowerShellben, ha egy kettős idézőjelbe (") foglalt sztring dollárjelet tartalmaz, akkor előtte backtick (`) karakterrel kell megadni. Például: tags:Project<`$key_case_sensitive`$>

Csoportosítás és elsőbbség

Ha egy célzott művelethez három vagy több kifejezés tartozik, amelyek különböző operátorokkal rendelkeznek a kifejezések között, a kiértékelési sorrend nem egyértelmű. Zárójelek () használatával csoportosíthatja a kifejezéseket, és megadhatja a kifejezések kiértékelésének sorrendjét. A zárójelek közé zárt kifejezések nagyobb elsőbbséget élveznek. Ha például a következő kifejezéssel rendelkezik:

a AND b OR c

Zárójeleket az alábbi módok egyikével kell hozzáadnia:

(a AND b) OR c
a AND (b OR c)

Következő lépések