@@ -38,7 +38,7 @@ internal class Evaluator(
3838 }
3939 }
4040 private val persistentStore: UserPersistentStorageHandler
41- private var gateOverrides: MutableMap <String , Boolean > = HashMap ()
41+ private var gateOverrides: MutableMap <String , MutableMap < String , Boolean > > = HashMap ()
4242 private var configOverrides: MutableMap <String , Map <String , Any >> = HashMap ()
4343 private var layerOverrides: MutableMap <String , Map <String , Any >> = HashMap ()
4444 private var hashLookupTable: MutableMap <String , ULong > = HashMap ()
@@ -148,7 +148,17 @@ internal class Evaluator(
148148 }
149149
150150 fun overrideGate (gateName : String , gateValue : Boolean ) {
151- gateOverrides[gateName] = gateValue
151+ if (gateOverrides[gateName] == null ) {
152+ gateOverrides[gateName] = HashMap ()
153+ }
154+ gateOverrides[gateName]?.set(" " , gateValue)
155+ }
156+
157+ fun overrideGate (gateName : String , gateValue : Boolean , userId : String ) {
158+ if (gateOverrides[gateName] == null ) {
159+ gateOverrides[gateName] = HashMap ()
160+ }
161+ gateOverrides[gateName]?.set(userId, gateValue)
152162 }
153163
154164 fun overrideConfig (configName : String , configValue : Map <String , Any >) {
@@ -171,6 +181,10 @@ internal class Evaluator(
171181 gateOverrides.remove(gateName)
172182 }
173183
184+ fun removeGateOverride (gateName : String , userId : String ) {
185+ gateOverrides[gateName]?.remove(userId)
186+ }
187+
174188 fun getConfig (ctx : EvaluationContext , dynamicConfigName : String ) {
175189 if (configOverrides.containsKey(dynamicConfigName)) {
176190 ctx.evaluation.jsonValue = configOverrides[dynamicConfigName] ? : mapOf<String , Any >()
@@ -308,7 +322,18 @@ internal class Evaluator(
308322 @JvmOverloads
309323 fun checkGate (ctx : EvaluationContext , gateName : String ) {
310324 if (gateOverrides.containsKey(gateName)) {
311- val value = gateOverrides[gateName] ? : false
325+ val userIds = mutableListOf<String >()
326+ ctx.user.userID?.let { userIds.add(it) }
327+ ctx.user.customIDs?.let { customIdMap -> userIds.addAll(customIdMap.values) }
328+ userIds.add(" " )
329+
330+ val value: Boolean = userIds
331+ .stream()
332+ .filter { it != null }
333+ .map { gateOverrides[gateName]?.get(it) }
334+ .filter { it != null }
335+ .findFirst().orElse(false ) ? : false
336+
312337 ctx.evaluation.booleanValue = value
313338 ctx.evaluation.jsonValue = value
314339 ctx.evaluation.evaluationDetails = createEvaluationDetails(EvaluationReason .LOCAL_OVERRIDE )
0 commit comments