Skip to main content
hamzas0003
April 3, 2025
Solved

Logical expression in security action

  • April 3, 2025
  • 2 replies
  • 0 views

or(
and(
rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}SLC Progetto Di Connessione.fields.{8435c94d-c75d-4250-b60c-267fa8e9fe8c}locked']=false,
a!isNullOrEmpty(rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}SLC Progetto Di Connessione.fields.{6586c1e5-e5c7-4f5b-8a42-04f5c067aab3}utenteLocked']),
a!isUserMemberOfGroup(username: loggedInUser(),groups: cons!SLC_GRP_VERIFICATORE_INFRATEL),
contains(cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[3],rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}SLC Progetto Di Connessione.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}idFase'])
)
),
or(
and(
rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}SLC Progetto Di Connessione.fields.{8435c94d-c75d-4250-b60c-267fa8e9fe8c}locked']=false,
a!isNullOrEmpty(rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}SLC Progetto Di Connessione.fields.{6586c1e5-e5c7-4f5b-8a42-04f5c067aab3}utenteLocked']),
a!isUserMemberOfGroup(username: loggedInUser(),groups: cons!SLC_GRP_RUP_INFRATEL),
contains(cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[4],rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}SLC Progetto Di Connessione.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}idFase'])
)
),
or(
and(
a!isUserMemberOfGroup(username: loggedInUser(),groups: cons!SLC_GRP_PMS_INFRATEL),
contains(cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[3],rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}SLC Progetto Di Connessione.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}idFase']),
contains(cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[4],rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}SLC Progetto Di Connessione.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}idFase'])
)
)

im using this code to display button for this 3 groups of users but its only appears only on the first expression groups which is:SLC_GRP_VERIFICATORE_INFRATEL,

is the logical expression of OR / AND is written bad?

Best answer by csteward

The way this is written it is essentially a list of 3 different expressions, 1 for each of your or() statements which only contain one clause within (and()).  Assuming you want this to resolve true if any of the and() conditions are met, try:

or(
  and(
    rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{8435c94d-c75d-4250-b60c-267fa8e9fe8c}'] = false,
    a!isNullOrEmpty(
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{6586c1e5-e5c7-4f5b-8a42-04f5c067aab3}']
    ),
    a!isUserMemberOfGroup(
      username: loggedInUser(),
      groups: cons!SLC_GRP_VERIFICATORE_INFRATEL
    ),
    contains(
      cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[3],
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}']
    )
  ),
  and(
    rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{8435c94d-c75d-4250-b60c-267fa8e9fe8c}'] = false,
    a!isNullOrEmpty(
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{6586c1e5-e5c7-4f5b-8a42-04f5c067aab3}']
    ),
    a!isUserMemberOfGroup(
      username: loggedInUser(),
      groups: cons!SLC_GRP_RUP_INFRATEL
    ),
    contains(
      cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[4],
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}']
    )
  ),
  and(
    a!isUserMemberOfGroup(
      username: loggedInUser(),
      groups: cons!SLC_GRP_PMS_INFRATEL
    ),
    contains(
      cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[3],
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}']
    ),
    contains(
      cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[4],
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}']
    )
  )
)

2 replies

csteward
cstewardAnswer
April 3, 2025

The way this is written it is essentially a list of 3 different expressions, 1 for each of your or() statements which only contain one clause within (and()).  Assuming you want this to resolve true if any of the and() conditions are met, try:

or(
  and(
    rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{8435c94d-c75d-4250-b60c-267fa8e9fe8c}'] = false,
    a!isNullOrEmpty(
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{6586c1e5-e5c7-4f5b-8a42-04f5c067aab3}']
    ),
    a!isUserMemberOfGroup(
      username: loggedInUser(),
      groups: cons!SLC_GRP_VERIFICATORE_INFRATEL
    ),
    contains(
      cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[3],
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}']
    )
  ),
  and(
    rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{8435c94d-c75d-4250-b60c-267fa8e9fe8c}'] = false,
    a!isNullOrEmpty(
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{6586c1e5-e5c7-4f5b-8a42-04f5c067aab3}']
    ),
    a!isUserMemberOfGroup(
      username: loggedInUser(),
      groups: cons!SLC_GRP_RUP_INFRATEL
    ),
    contains(
      cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[4],
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}']
    )
  ),
  and(
    a!isUserMemberOfGroup(
      username: loggedInUser(),
      groups: cons!SLC_GRP_PMS_INFRATEL
    ),
    contains(
      cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[3],
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}']
    ),
    contains(
      cons!SLC_INTS_ID_FASI_PROGETTO_DI_CONNESSIONE[4],
      rv!record['recordType!{6456804e-1013-4209-bb05-6edb57f49898}.fields.{12f3ca11-6e56-437c-a111-0188f3e80076}']
    )
  )
)

stefanhelzle0001
April 3, 2025

Not sure what that logic should express. That or() only wraps a single condition, the and(). In the and, you define many conditions. Which is OK, but hard to validate. Especially without knowing any details.

I suggest to first implement a more simplified version, and then add more complexity once that works.