|
17 | 17 |
|
18 | 18 | from casbin import persist |
19 | 19 | from casbin.persist.adapters.asyncio import AsyncAdapter |
20 | | -from sqlalchemy import Column, Integer, String, delete |
| 20 | +from sqlalchemy import Column, Integer, String, delete, insert |
21 | 21 | from sqlalchemy import or_ |
22 | 22 | from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession |
23 | 23 | from sqlalchemy.future import select |
@@ -190,14 +190,20 @@ async def add_policy(self, sec, ptype, rule): |
190 | 190 |
|
191 | 191 | async def add_policies(self, sec, ptype, rules): |
192 | 192 | """adds a policy rules to the storage.""" |
193 | | - if self._external_session is not None: |
194 | | - # Use external session to add all rules in the same transaction |
195 | | - for rule in rules: |
196 | | - await self._save_policy_line(ptype, rule, self._external_session) |
197 | | - else: |
198 | | - # Use individual sessions for each rule (original behavior) |
199 | | - for rule in rules: |
200 | | - await self._save_policy_line(ptype, rule) |
| 193 | + if not rules: |
| 194 | + return |
| 195 | + |
| 196 | + # Build rows for executemany bulk insert |
| 197 | + rows = [] |
| 198 | + for rule in rules: |
| 199 | + row = {"ptype": ptype} |
| 200 | + for i, v in enumerate(rule): |
| 201 | + row[f"v{i}"] = v |
| 202 | + rows.append(row) |
| 203 | + |
| 204 | + async with self._session_scope() as session: |
| 205 | + stmt = insert(self._db_class) |
| 206 | + await session.execute(stmt, rows) |
201 | 207 |
|
202 | 208 | async def remove_policy(self, sec, ptype, rule): |
203 | 209 | """removes a policy rule from the storage.""" |
|
0 commit comments