Skip to content

Conversation

@JavaSaBr
Copy link
Owner

@JavaSaBr JavaSaBr commented Dec 22, 2025

#142
Continue intergration ACL engine:

  1. Rename Rule -> AclRule (Rule is too generic)
  2. Fix handling null username for value matchers
  3. Move topic matching logic to the Topic implementation level with some optimizations
  4. Update GDSL format again
  5. More tests and validations

The last revision of the GDSL:

package acl.config

allowPublish {
  users {
    userNames {
      eq("sensor1")
      regex("sensor10\$")
    }
    clientIds {
      eq("clientId1")
      regex("^cliend")
    }
    ipAddresses {
      eq("10.56.0.3")
      eq("127.0.0.1")
    }
    anyOf {
      userName anyValue()
      clientId eq("clientId2")
      ipAddress eq("10.56.0.3")
    }
    allOf {
      userName eq("sensor2")
      clientId eq("clientId2")
      ipAddress eq("10.56.0.3")
    }
  }
  topics {
    eq("/topic1")
    eq("/topic2/temp")
  }
}

denySubscribe {
  users {
    allOf {
      userName eq("sensor2")
      clientId eq("clientId2")
      ipAddress eq("10.56.0.3")
    }
  }
  topics {
    match("/topic1/#")
    match("/topic2/+/temp")
  }
}

allowSubscribe {
  users {
    allOf {
      userName eq("sensor2")
      clientId eq("clientId2")
      ipAddress eq("10.56.0.3")
    }
  }
  topics {
    match("/topic1/#")
    match("/topic2/+/temp")
  }
}

denyPublish {
  users {
    anyUser()
  }
  topics {
    anyTopic()
  }
}

denySubscribe {
  users {
    anyUser()
  }
  topics {
    anyTopic()
  }
}

allowPublish {
  users {
    userName startsWith("start_with_5")
    clientId contains("contains")
  }
  topics {
    anyTopic()
  }
}

…nto feature/142-integrate-acl-groovy-based-engine-part-2
…nto feature/142-integrate-acl-groovy-based-engine-part-3
…gine-part-3

# Conflicts:
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/loader/AclRulesLoader.groovy
…nto feature/142-integrate-acl-groovy-based-engine-part-4

# Conflicts:
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/builder/ClientMatcherBuilder.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/condition/ClientIdCondition.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/condition/IpAddressCondition.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/condition/UserNameCondition.java
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/UserMatchersFactory.groovy
#	acl-groovy-dsl/src/test/groovy/javasabr/mqtt/acl/groovy/dsl/loader/AclRulesLoaderTest.groovy
…ate-acl-groovy-based-engine-part-4

# Conflicts:
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/builder/ClientMatcherBuilder.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/condition/AllOfCondition.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/condition/AnyOfCondition.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/condition/ClientIdCondition.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/condition/IpAddressCondition.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/condition/NoneUserCondition.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/condition/UserNameCondition.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/matcher/AnyValueMatcher.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/matcher/TopicFilterMatcher.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/matcher/TopicNameMatcher.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/matcher/ValueMatcher.java
#	acl-engine/src/main/java/javasabr/mqtt/acl/engine/model/rule/AbstractAclRule.java
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/AclRulesBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/AllOfUserConditionBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/AllowPublishRuleBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/AllowSubscribeRuleBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/AnyOfUserConditionBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/DenyPublishRuleBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/DenySubscribeRuleBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/MultiUserConditionBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/PublishRuleBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/RuleBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/SubscribeRuleBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/TopicsBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/UserConditionBuilder.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/UserMatchersFactory.groovy
#	acl-groovy-dsl/src/main/groovy/javasabr/mqtt/acl/groovy/dsl/builder/UsersBuilder.groovy
#	acl-groovy-dsl/src/main/resources/acl.gdsl
#	acl-groovy-dsl/src/test/groovy/javasabr/mqtt/acl/groovy/dsl/loader/AclRulesLoaderTest.groovy
#	acl-groovy-dsl/src/test/resources/acl/config/acl.gacl
@JavaSaBr JavaSaBr requested a review from crazyrokr December 22, 2025 18:17
@JavaSaBr JavaSaBr self-assigned this Dec 22, 2025
@JavaSaBr JavaSaBr changed the title ntegrate ACL groovy based engine, part 4 Integrate ACL groovy based engine, part 4 Dec 22, 2025
@github-actions
Copy link

Test Coverage Report

Overall Project 85.47% -1.08% 🍏
Files changed 84.24% 🍏

File Coverage
TopicNameMatcher.java 100% 🍏
EqualsMatcher.java 100% 🍏
ValueMatcher.java 100% 🍏
AclEngine.java 100% 🍏
RuleContainerBuilder.java 100% 🍏
AclRulesLoader.groovy 100% 🍏
TopicMatchersFactory.groovy 100% 🍏
MultiUserConditionBuilder.groovy 100% 🍏
SubscribeAclRuleBuilder.groovy 100% 🍏
DenySubscribeAclRuleBuilder.groovy 100% 🍏
PublishAclRuleBuilder.groovy 100% 🍏
DenyPublishAclRuleBuilder.groovy 100% 🍏
UserMatchersFactory.groovy 100% 🍏
AclRulesBuilder.groovy 100% 🍏
AllowPublishAclRuleBuilder.groovy 100% 🍏
AllowSubscribeAclRuleBuilder.groovy 100% 🍏
TopicFilter.java 100% 🍏
ClientIdCondition.java 100% 🍏
MqttUserCondition.java 100% 🍏
AbstractAclRule.java 100% 🍏
DenySubscribeAclRule.java 100% 🍏
AllowSubscribeAclRule.java 100% 🍏
DenyPublishAclRule.java 100% 🍏
AllowPublishAclRule.java 100% 🍏
AbstractTopic.java 93.28% 🍏
AllOfUserConditionBuilder.groovy 91.3% 🍏
TopicsBuilder.groovy 89.69% -10.31% 🍏
UserConditionBuilder.groovy 84.21% -15.79% 🍏
AnyOfCondition.java 83.78% -16.22% 🍏
AllOfCondition.java 83.78% -16.22% 🍏
AclRuleBuilder.groovy 82.86% -12.38% 🍏
UserMatchers.java 80.77% -19.23% 🍏
UsersBuilder.groovy 80.08% -11.95% 🍏
UserNameCondition.java 79.31% -3.45% 🍏
TopicName.java 75.86% -13.79% 🍏
AnyUserCondition.java 71.43% 🍏
AnyValueMatcher.java 70.59% 🍏
IpAddressCondition.java 70.59% 🍏
UserMatchersBuilder.groovy 61.48% -38.52% 🍏
NoneUserCondition.java 60% 🍏
TopicFilterMatcher.java 57.89% -26.32% 🍏
TopicMatchers.java 40% -60%
AnyOfUserConditionBuilder.groovy 26.67% -60%
GroovyDslBasedAuthorizationService.java 0% -12.59%

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants