|
6 | 6 | use Casbin\Persist\Adapter as AdapterContract;
|
7 | 7 | use TechOne\Database\Manager;
|
8 | 8 | use Casbin\Persist\AdapterHelper;
|
9 |
| -use Casbin\Persist\FilteredAdapter; |
| 9 | +use Casbin\Persist\FilteredAdapter as FilteredAdapterContract; |
10 | 10 | use Casbin\Persist\Adapters\Filter;
|
11 | 11 | 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; |
14 | 14 | use Closure;
|
15 | 15 | use Throwable;
|
16 | 16 |
|
|
19 | 19 | *
|
20 | 20 |
|
21 | 21 | */
|
22 |
| -class Adapter implements AdapterContract, FilteredAdapter, BatchAdapter, UpdatableAdapter |
| 22 | +class Adapter implements AdapterContract, FilteredAdapterContract, BatchAdapterContract, UpdatableAdapterContract |
23 | 23 | {
|
24 | 24 | use AdapterHelper;
|
25 | 25 |
|
@@ -305,4 +305,27 @@ public function updatePolicy(string $sec, string $ptype, array $oldRule, array $
|
305 | 305 |
|
306 | 306 | $this->connection->execute($sql, array_merge($updateValue, $where));
|
307 | 307 | }
|
| 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 | + } |
308 | 331 | }
|
0 commit comments