|
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 | * @author techlee@qq.com |
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