natehuangting commented on issue #18430:
URL:
https://github.com/apache/shardingsphere/issues/18430#issuecomment-1168122045
I have designed the audit scheme as follows.
The first is configuration, like ShardingShpereAlgorithm, only type and
props, so it can also be defined using ShardingShpereAlgorithm.
I thought of two configuration methods, scheme 1 is more brief, scheme 2 is
more readable.It should be noted that the algorithm will only be defined and
used only once in the Sharding configuration.
scheme 1
```
rules:
- !SHARDING
audits:
- type: SHARDING_KEY_CHECK
props:
allow-hint-without_sharding_key: true
- type: SHARDING_KEY_CHECK
props:
allow-hint-without_sharding_key: true
```
Scheme 2
```
rules:
- !SHARDING
auditAlgorithms:
default_audit1:
type: SHARDING_KEY_CHECK
props:
allow-hint-without_sharding_key: true
default_audit2:
type: SHARDING_KEY_CHECK
props:
allow-hint-without_sharding_key: true
audits:
- default_audit1
- default_audit2
```
```
package org.apache.shardingsphere.sharding.yaml.config;
public final class YamlShardingRuleConfiguration implements
YamlRuleConfiguration {
private Collection<YamlShardingSphereAlgorithmConfiguration> audits =
new LinkedList<>();
}
```
The second is ShardingAuditAlgorithm, like ShardingAlgorithm,
ShardingAuditAlgorithm is also a subclass of ShardingSphereAlgorithm.
<img width="297" alt="image"
src="https://user-images.githubusercontent.com/26433395/176070140-87075b21-dce1-4e59-953e-4a5abc5d98f1.png">
```
package org.apache.shardingsphere.sharding.spi;
public final class ShardingAuditChecker implements SQLChecker<ShardingRule> {
@Override
public boolean check(final String databaseName, final Grantee grantee,
final ShardingRule rule) {
return true;
}
@Override
public SQLCheckResult check(final SQLStatement sqlStatement, final
List<Object> parameters, final Grantee grantee,
final String currentDatabase, final Map<String,
ShardingSphereDatabase> databases,
final ShardingRule rule) {
for (ShardingAuditAlgorithm shardingAuditCheckAlgorithm :
rule.getShardingAuditAlgorithms()) {
SQLCheckResult sqlCheckResult =
shardingAuditCheckAlgorithm.check(sqlStatement, parameters, grantee,
currentDatabase, databases, rule);
if (!sqlCheckResult.isPassed()) {
return sqlCheckResult;
}
}
return new SQLCheckResult(true, "");
}
@Override
public boolean check(final Grantee grantee, final ShardingRule rule) {
return true;
}
@Override
public boolean check(final Grantee grantee, final BiPredicate<Object,
Object> validator, final Object cipher,
final ShardingRule rule) {
return true;
}
@Override
public int getOrder() {
return ShardingAuditOrder.ORDER;
}
@Override
public Class<ShardingRule> getTypeClass() {
return ShardingRule.class;
}
}
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]