Skip to content

Commit 322f077

Browse files
authored
Merge pull request #15 from basakest/update-policies
feat: support updatePolicies method, fix #14
2 parents 5519e48 + d3fc5c6 commit 322f077

File tree

2 files changed

+55
-4
lines changed

2 files changed

+55
-4
lines changed

Diff for: src/Adapter.php

+27-4
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@
66
use Casbin\Persist\Adapter as AdapterContract;
77
use TechOne\Database\Manager;
88
use Casbin\Persist\AdapterHelper;
9-
use Casbin\Persist\FilteredAdapter;
9+
use Casbin\Persist\FilteredAdapter as FilteredAdapterContract;
1010
use Casbin\Persist\Adapters\Filter;
1111
use Casbin\Exceptions\InvalidFilterTypeException;
12-
use Casbin\Persist\BatchAdapter;
13-
use Casbin\Persist\UpdatableAdapter;
12+
use Casbin\Persist\BatchAdapter as BatchAdapterContract;
13+
use Casbin\Persist\UpdatableAdapter as UpdatableAdapterContract;
1414
use Closure;
1515
use Throwable;
1616

@@ -19,7 +19,7 @@
1919
*
2020
2121
*/
22-
class Adapter implements AdapterContract, FilteredAdapter, BatchAdapter, UpdatableAdapter
22+
class Adapter implements AdapterContract, FilteredAdapterContract, BatchAdapterContract, UpdatableAdapterContract
2323
{
2424
use AdapterHelper;
2525

@@ -305,4 +305,27 @@ public function updatePolicy(string $sec, string $ptype, array $oldRule, array $
305305

306306
$this->connection->execute($sql, array_merge($updateValue, $where));
307307
}
308+
309+
/**
310+
* UpdatePolicies updates some policy rules to storage, like db, redis.
311+
*
312+
* @param string $sec
313+
* @param string $ptype
314+
* @param string[][] $oldRules
315+
* @param string[][] $newRules
316+
* @return void
317+
*/
318+
public function updatePolicies(string $sec, string $ptype, array $oldRules, array $newRules): void
319+
{
320+
$this->connection->getPdo()->beginTransaction();
321+
try {
322+
foreach ($oldRules as $i => $oldRule) {
323+
$this->updatePolicy($sec, $ptype, $oldRule, $newRules[$i]);
324+
}
325+
$this->connection->getPdo()->commit();
326+
} catch (Throwable $e) {
327+
$this->connection->getPdo()->rollback();
328+
throw $e;
329+
}
330+
}
308331
}

Diff for: tests/AdapterTest.php

+28
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,34 @@ public function testUpdatePolicy()
245245
], $e->getPolicy());
246246
}
247247

248+
public function testUpdatePolicies()
249+
{
250+
$e = $this->getEnforcer();
251+
$this->assertEquals([
252+
['alice', 'data1', 'read'],
253+
['bob', 'data2', 'write'],
254+
['data2_admin', 'data2', 'read'],
255+
['data2_admin', 'data2', 'write'],
256+
], $e->getPolicy());
257+
258+
$oldPolicies = [
259+
['alice', 'data1', 'read'],
260+
['bob', 'data2', 'write']
261+
];
262+
$newPolicies = [
263+
['alice', 'data1', 'write'],
264+
['bob', 'data2', 'read']
265+
];
266+
$e->updatePolicies($oldPolicies, $newPolicies);
267+
268+
$this->assertEquals([
269+
['alice', 'data1', 'write'],
270+
['bob', 'data2', 'read'],
271+
['data2_admin', 'data2', 'read'],
272+
['data2_admin', 'data2', 'write'],
273+
], $e->getPolicy());
274+
}
275+
248276
protected function env($key, $default = null)
249277
{
250278
$value = getenv($key);

0 commit comments

Comments
 (0)