fix: Amend part logic of removePolicies

This commit is contained in:
basakest 2021-07-09 20:37:27 +08:00
parent cc73dea28a
commit 33121252ae
1 changed files with 5 additions and 13 deletions

View File

@ -14,6 +14,7 @@ use Casbin\Model\Model;
use Casbin\Persist\AdapterHelper; use Casbin\Persist\AdapterHelper;
use DateTime; use DateTime;
use Casbin\Exceptions\InvalidFilterTypeException; use Casbin\Exceptions\InvalidFilterTypeException;
use Illuminate\Support\Facades\DB;
/** /**
* DatabaseAdapter. * DatabaseAdapter.
* *
@ -167,20 +168,11 @@ class DatabaseAdapter implements DatabaseAdapterContract, BatchDatabaseAdapterCo
*/ */
public function removePolicies(string $sec, string $ptype, array $rules): void public function removePolicies(string $sec, string $ptype, array $rules): void
{ {
$instance = $this->eloquent->where('p_type', $ptype); DB::transaction(function () use ($sec, $rules, $ptype) {
foreach($rules as $rule) foreach ($rules as $rule) {
{ $this->removePolicy($sec, $ptype, $rule);
foreach ($rule as $key => $value) {
$keys[] = 'v'.strval($key);
$con['v'.strval($key)][] = $value;
} }
} });
$keys = array_unique($keys);
foreach($keys as $key){
$instance->whereIn($key, $con[$key]);
}
$instance->delete();
Rule::fireModelEvent('deleted');
} }
/** /**