forbid (
principal,
action == StackOne::Action::"writeField",
resource
)
when {
(resource in StackOne::Connector::"netsuite"
|| resource in StackOne::Connector::"xero")
&& resource.path == "payment.amount"
&& !(
context.args.hasTag("amount_minor")
&& context.args.getTag("amount_minor") has num
&& context.args.getTag("amount_minor").num >= 2500
&& context.args.getTag("amount_minor").num <= 50000
&& context.args.hasTag("currency")
&& context.args.getTag("currency") has str
&& context.args.getTag("currency").str == "USD"
)
};
{
"effect": "forbid",
"principal": {
"op": "All"
},
"action": {
"op": "==",
"entity": {
"type": "StackOne::Action",
"id": "writeField"
}
},
"resource": {
"op": "All"
},
"conditions": [
{
"kind": "when",
"body": {
"&&": {
"left": {
"&&": {
"left": {
"||": {
"left": {
"in": {
"left": {
"Var": "resource"
},
"right": {
"Value": {
"__entity": {
"type": "StackOne::Connector",
"id": "netsuite"
}
}
}
}
},
"right": {
"in": {
"left": {
"Var": "resource"
},
"right": {
"Value": {
"__entity": {
"type": "StackOne::Connector",
"id": "xero"
}
}
}
}
}
}
},
"right": {
"==": {
"left": {
".": {
"left": {
"Var": "resource"
},
"attr": "path"
}
},
"right": {
"Value": "payment.amount"
}
}
}
}
},
"right": {
"!": {
"arg": {
"&&": {
"left": {
"&&": {
"left": {
"&&": {
"left": {
"&&": {
"left": {
"&&": {
"left": {
"&&": {
"left": {
"hasTag": {
"left": {
".": {
"left": {
"Var": "context"
},
"attr": "args"
}
},
"right": {
"Value": "amount_minor"
}
}
},
"right": {
"has": {
"left": {
"getTag": {
"left": {
".": {
"left": {
"Var": "context"
},
"attr": "args"
}
},
"right": {
"Value": "amount_minor"
}
}
},
"attr": "num"
}
}
}
},
"right": {
">=": {
"left": {
".": {
"left": {
"getTag": {
"left": {
".": {
"left": {
"Var": "context"
},
"attr": "args"
}
},
"right": {
"Value": "amount_minor"
}
}
},
"attr": "num"
}
},
"right": {
"Value": 2500
}
}
}
}
},
"right": {
"<=": {
"left": {
".": {
"left": {
"getTag": {
"left": {
".": {
"left": {
"Var": "context"
},
"attr": "args"
}
},
"right": {
"Value": "amount_minor"
}
}
},
"attr": "num"
}
},
"right": {
"Value": 50000
}
}
}
}
},
"right": {
"hasTag": {
"left": {
".": {
"left": {
"Var": "context"
},
"attr": "args"
}
},
"right": {
"Value": "currency"
}
}
}
}
},
"right": {
"has": {
"left": {
"getTag": {
"left": {
".": {
"left": {
"Var": "context"
},
"attr": "args"
}
},
"right": {
"Value": "currency"
}
}
},
"attr": "str"
}
}
}
},
"right": {
"==": {
"left": {
".": {
"left": {
"getTag": {
"left": {
".": {
"left": {
"Var": "context"
},
"attr": "args"
}
},
"right": {
"Value": "currency"
}
}
},
"attr": "str"
}
},
"right": {
"Value": "USD"
}
}
}
}
}
}
}
}
}
}
]
}