Skip to content

Commit 769694f

Browse files
authored
feat: add missing code to SyncedCachedEnforcer and fix cache not used issue (#444)
1 parent 8dd4940 commit 769694f

File tree

1 file changed

+55
-3
lines changed

1 file changed

+55
-3
lines changed

src/main/java/org/casbin/jcasbin/main/SyncedCachedEnforcer.java

+55-3
Original file line numberDiff line numberDiff line change
@@ -120,8 +120,9 @@ public void enableCache(boolean enable) {
120120
* @param rvals Parameters for the enforcement check.
121121
* @return The result of the enforcement check.
122122
*/
123+
@Override
123124
public boolean enforce(Object... rvals) {
124-
if (enableCache.get()) {
125+
if (!enableCache.get()) {
125126
return super.enforce(rvals);
126127
}
127128

@@ -143,6 +144,7 @@ public boolean enforce(Object... rvals) {
143144
/**
144145
* Loads the policy, clearing the cache if enabled.
145146
*/
147+
@Override
146148
public void loadPolicy() {
147149
if(enableCache == null || !enableCache.get()){
148150
super.loadPolicy();
@@ -160,6 +162,7 @@ public void loadPolicy() {
160162
* @param params Policy parameters.
161163
* @return Whether the addition was successful.
162164
*/
165+
@Override
163166
public boolean addPolicy(String... params) {
164167
if (!checkOneAndRemoveCache(params)) {
165168
return false;
@@ -173,19 +176,35 @@ public boolean addPolicy(String... params) {
173176
* @param rules Policy rules.
174177
* @return Whether the addition was successful.
175178
*/
179+
@Override
176180
public boolean addPolicies(List<List<String>> rules) {
177181
if (!checkManyAndRemoveCache(rules)) {
178182
return false;
179183
}
180184
return super.addPolicies(rules);
181185
}
182186

187+
/**
188+
* Adds multiple policies while checking and removing the cache.
189+
*
190+
* @param rules Policy rules.
191+
* @return Whether the addition was successful.
192+
*/
193+
@Override
194+
public boolean addPolicies(String[][] rules) {
195+
if (!checkManyAndRemoveCache(rules)) {
196+
return false;
197+
}
198+
return super.addPolicies(rules);
199+
}
200+
183201
/**
184202
* Removes a single policy while checking and removing the cache.
185203
*
186204
* @param params Policy parameters.
187205
* @return Whether the removal was successful.
188206
*/
207+
@Override
189208
public boolean removePolicy(String... params) {
190209
if (!checkOneAndRemoveCache(params)) {
191210
return false;
@@ -199,13 +218,28 @@ public boolean removePolicy(String... params) {
199218
* @param rules Policy rules.
200219
* @return Whether the removal was successful.
201220
*/
221+
@Override
202222
public boolean removePolicies(List<List<String>>rules) {
203223
if (!checkManyAndRemoveCache(rules)) {
204224
return false;
205225
}
206226
return super.removePolicies(rules);
207227
}
208228

229+
/**
230+
* Removes multiple policies while checking and removing the cache.
231+
*
232+
* @param rules Policy rules.
233+
* @return Whether the removal was successful.
234+
*/
235+
@Override
236+
public boolean removePolicies(String[][] rules) {
237+
if (!checkManyAndRemoveCache(rules)) {
238+
return false;
239+
}
240+
return super.removePolicies(rules);
241+
}
242+
209243
/**
210244
* Retrieves a cached result based on the given key.
211245
*
@@ -306,7 +340,7 @@ public void invalidateCache() {
306340
*/
307341
private boolean checkOneAndRemoveCache(String... params) {
308342
if (enableCache.get()) {
309-
String key = getKey((Object) params);
343+
String key = getKey((Object []) params);
310344
if (key != null) {
311345
cache.delete(key);
312346
}
@@ -323,7 +357,25 @@ private boolean checkOneAndRemoveCache(String... params) {
323357
private boolean checkManyAndRemoveCache(List<List<String>> rules) {
324358
if (!rules.isEmpty() && enableCache.get()) {
325359
for (List<String> rule : rules) {
326-
String key = getKey(rule);
360+
String key = getKey(rule.toArray());
361+
if (key != null) {
362+
cache.delete(key);
363+
}
364+
}
365+
}
366+
return true;
367+
}
368+
369+
/**
370+
* Checks and removes cache for multiple policies.
371+
*
372+
* @param rules Policy rules.
373+
* @return Whether the check was successful.
374+
*/
375+
private boolean checkManyAndRemoveCache(String[][] rules) {
376+
if (rules != null && enableCache.get()) {
377+
for (String[] rule : rules) {
378+
String key = getKey((Object[]) rule);
327379
if (key != null) {
328380
cache.delete(key);
329381
}

0 commit comments

Comments
 (0)