{"_id":"drizzle-adapter","_rev":"4-9862299e5d7527a3015df49ac6a97f5d","name":"drizzle-adapter","dist-tags":{"latest":"1.4.0"},"versions":{"1.1.0":{"name":"drizzle-adapter","version":"1.1.0","keywords":["casbin","node-casbin","adapter","drizzle","drizzle-orm","access-control","authorization","auth","authz","acl","rbac","abac","orm"],"author":{"name":"Node-Casbin"},"_id":"drizzle-adapter@1.1.0","maintainers":[{"name":"hsluoyz","email":"hsluoyz@gmail.com"}],"homepage":"https://casbin.org","bugs":{"url":"https://github.com/node-casbin/drizzle-adapter/issues"},"dist":{"shasum":"c58201d5fd3129769b661f42093725eceab68b7c","tarball":"https://registry.npmjs.org/drizzle-adapter/-/drizzle-adapter-1.1.0.tgz","fileCount":11,"integrity":"sha512-ocoVlLR3dVZ3Ll/QxubfpujXRgZALBAhC/S168V4b4wNem3qnxO/dXSeeeDx+neLk+Ym5GRPgYC+2+HSmf6Qsg==","signatures":[{"sig":"MEYCIQDVLxh14zSRy5734yTG+/qCxSIzRVE0C/5zNeCM63o8/wIhANeX1A4Fl7iukN3TPZLe4duW+DABn0qt5OBoa9/cNDjn","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51575},"jest":{"testMatch":["**/test/*.test.+(ts|tsx)"],"transform":{"^.+\\.(ts|tsx)$":"ts-jest"},"moduleFileExtensions":["ts","tsx","js","jsx","json","node"],"testEnvironmentOptions":{"url":"http://localhost"}},"main":"lib/index.js","gitHead":"336226fcea199af8822040215d60347fed7af724","scripts":{"fix":"eslint \"src/**/*.{ts,js,jsx}\" --fix","lint":"eslint \"src/**/*.{ts,js,jsx}\"","test":"jest --runInBand","build":"rimraf lib && tsc","prepare":"npm run build","release":"npx -p semantic-release -p @semantic-release/git -p @semantic-release/changelog -p @semantic-release/github semantic-release","coverage":"jest --coverage --runInBand","precommit":"lint-staged","prepublish":"yarn run lint && yarn build"},"typings":"lib/index.d.ts","_npmUser":{"name":"hsluoyz","email":"hsluoyz@gmail.com"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0","type":"Apache-2.0"}],"repository":{"url":"git+https://github.com/node-casbin/drizzle-adapter.git","type":"git"},"_npmVersion":"10.9.4","description":"Drizzle ORM adapter for Casbin","directories":{},"lint-staged":{"*.{ts,tsx,js,jsx}":["eslint --fix","git add"]},"_nodeVersion":"20.19.5","dependencies":{},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^8.0.3","casbin":"^5.30.0","eslint":"^8.56.0","rimraf":"^5.0.5","ts-jest":"^29.1.1","coveralls":"^3.1.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","drizzle-orm":"^0.29.0","lint-staged":"^15.2.0","better-sqlite3":"^9.2.2","@types/better-sqlite3":"^7.6.8","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"peerDependencies":{"casbin":"^5.0.0","drizzle-orm":"^0.29.0"},"_npmOperationalInternal":{"tmp":"tmp/drizzle-adapter_1.1.0_1764119514414_0.5984684571686014","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"drizzle-adapter","version":"1.2.0","keywords":["casbin","node-casbin","adapter","drizzle","drizzle-orm","access-control","authorization","auth","authz","acl","rbac","abac","orm"],"author":{"name":"Node-Casbin"},"_id":"drizzle-adapter@1.2.0","maintainers":[{"name":"hsluoyz","email":"hsluoyz@gmail.com"}],"homepage":"https://casbin.org","bugs":{"url":"https://github.com/node-casbin/drizzle-adapter/issues"},"dist":{"shasum":"ad9cb74bc60f58cfe2dbdf3ba75d14986e528721","tarball":"https://registry.npmjs.org/drizzle-adapter/-/drizzle-adapter-1.2.0.tgz","fileCount":11,"integrity":"sha512-EQVZf2n6YXEzXf22/xeRlZtp/FvA9daQgapbPh7iU5eawLBSrdGjVHjcY+bNpCBKJmJmkfvnDs/ooe9Tig7Qfw==","signatures":[{"sig":"MEUCIQDaAgd3FI8VR6SdBbWzBZYWfWQLTM8pXLumed+yd98/3wIgBhz4sOaacBDinq3nnptn5jconB/4vDPUqc91OXk1gDU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51575},"jest":{"testMatch":["**/test/*.test.+(ts|tsx)"],"transform":{"^.+\\.(ts|tsx)$":"ts-jest"},"moduleFileExtensions":["ts","tsx","js","jsx","json","node"],"testEnvironmentOptions":{"url":"http://localhost"}},"main":"lib/index.js","gitHead":"a5b5e4f632c5892bd76a1fe6267351826c39e242","scripts":{"fix":"eslint \"src/**/*.{ts,js,jsx}\" --fix","lint":"eslint \"src/**/*.{ts,js,jsx}\"","test":"jest --runInBand","build":"rimraf lib && tsc","prepare":"npm run build","release":"npx -p semantic-release -p @semantic-release/git -p @semantic-release/changelog -p @semantic-release/github semantic-release","coverage":"jest --coverage --runInBand","precommit":"lint-staged","prepublish":"yarn run lint && yarn build"},"typings":"lib/index.d.ts","_npmUser":{"name":"hsluoyz","email":"hsluoyz@gmail.com"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0","type":"Apache-2.0"}],"repository":{"url":"git+https://github.com/node-casbin/drizzle-adapter.git","type":"git"},"_npmVersion":"10.9.4","description":"Drizzle ORM adapter for Casbin","directories":{},"lint-staged":{"*.{ts,tsx,js,jsx}":["eslint --fix","git add"]},"_nodeVersion":"20.19.5","dependencies":{},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^8.0.3","casbin":"^5.30.0","eslint":"^8.56.0","rimraf":"^5.0.5","ts-jest":"^29.1.1","coveralls":"^3.1.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","drizzle-orm":"^0.29.0","lint-staged":"^15.2.0","better-sqlite3":"^9.2.2","@types/better-sqlite3":"^7.6.8","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"peerDependencies":{"casbin":"^5.0.0","drizzle-orm":"^0.29.0"},"_npmOperationalInternal":{"tmp":"tmp/drizzle-adapter_1.2.0_1764120626521_0.4391809982583781","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"drizzle-adapter","version":"1.3.0","keywords":["casbin","node-casbin","adapter","drizzle","drizzle-orm","access-control","authorization","auth","authz","acl","rbac","abac","orm"],"author":{"name":"Node-Casbin"},"_id":"drizzle-adapter@1.3.0","maintainers":[{"name":"hsluoyz","email":"hsluoyz@gmail.com"}],"homepage":"https://casbin.org","bugs":{"url":"https://github.com/node-casbin/drizzle-adapter/issues"},"dist":{"shasum":"725119218f7efab9eafced0a4912b9063c3473a4","tarball":"https://registry.npmjs.org/drizzle-adapter/-/drizzle-adapter-1.3.0.tgz","fileCount":11,"integrity":"sha512-wfHeRo/NSsGrBwCUt1k4QeHxdvEMMpbzNhIE6h9/ByBhOR4zd1p8IDFHyFRkJMcfB2apKh70FMeiLvNE5ZftTg==","signatures":[{"sig":"MEQCIAwAzXkYSO5jmyV9XxbTAS53TYpOqHcDa7dS808V5dEeAiADAL0hq+YljZtBqtVHtXLtA6MJwIyIMIfARSe/GJt2cA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":51575},"jest":{"testMatch":["**/test/*.test.+(ts|tsx)"],"transform":{"^.+\\.(ts|tsx)$":"ts-jest"},"moduleFileExtensions":["ts","tsx","js","jsx","json","node"],"testEnvironmentOptions":{"url":"http://localhost"}},"main":"lib/index.js","gitHead":"e8aa7dfb46f2e9ae409684d30886b2978f406f31","scripts":{"fix":"eslint \"src/**/*.{ts,js,jsx}\" --fix","lint":"eslint \"src/**/*.{ts,js,jsx}\"","test":"jest --runInBand","build":"rimraf lib && tsc","prepare":"npm run build","release":"npx -p semantic-release -p @semantic-release/git -p @semantic-release/changelog -p @semantic-release/github semantic-release","coverage":"jest --coverage --runInBand","precommit":"lint-staged","prepublish":"yarn run lint && yarn build"},"typings":"lib/index.d.ts","_npmUser":{"name":"hsluoyz","email":"hsluoyz@gmail.com"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0","type":"Apache-2.0"}],"repository":{"url":"git+https://github.com/node-casbin/drizzle-adapter.git","type":"git"},"_npmVersion":"10.9.4","description":"Drizzle ORM adapter for Casbin","directories":{},"lint-staged":{"*.{ts,tsx,js,jsx}":["eslint --fix","git add"]},"_nodeVersion":"20.19.5","dependencies":{},"publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^29.7.0","husky":"^8.0.3","casbin":"^5.30.0","eslint":"^8.56.0","rimraf":"^5.0.5","ts-jest":"^29.1.1","coveralls":"^3.1.1","typescript":"^5.3.3","@types/jest":"^29.5.11","@types/node":"^20.10.6","drizzle-orm":"^0.29.0","lint-staged":"^15.2.0","better-sqlite3":"^9.2.2","@types/better-sqlite3":"^7.6.8","@typescript-eslint/parser":"^6.15.0","@typescript-eslint/eslint-plugin":"^6.15.0"},"peerDependencies":{"casbin":"^5.0.0","drizzle-orm":"^0.29.0"},"_npmOperationalInternal":{"tmp":"tmp/drizzle-adapter_1.3.0_1764120781790_0.22048452511506267","host":"s3://npm-registry-packages-npm-production"}},"1.4.0":{"name":"drizzle-adapter","version":"1.4.0","description":"Drizzle ORM adapter for Casbin","main":"lib/index.js","typings":"lib/index.d.ts","publishConfig":{"tag":"latest","registry":"https://registry.npmjs.org"},"scripts":{"precommit":"lint-staged","prepublish":"yarn run lint && yarn build","build":"rimraf lib && tsc","coverage":"jest --coverage --runInBand","lint":"eslint \"src/**/*.{ts,js,jsx}\"","fix":"eslint \"src/**/*.{ts,js,jsx}\" --fix","test":"jest --runInBand","release":"npx -p semantic-release -p @semantic-release/git -p @semantic-release/changelog -p @semantic-release/github semantic-release","prepare":"npm run build"},"devDependencies":{"@types/better-sqlite3":"^7.6.8","@types/jest":"^29.5.11","@types/node":"^20.10.6","@typescript-eslint/eslint-plugin":"^6.15.0","@typescript-eslint/parser":"^6.15.0","better-sqlite3":"^9.2.2","casbin":"^5.30.0","coveralls":"^3.1.1","drizzle-orm":"^0.45.0","eslint":"^8.56.0","husky":"^8.0.3","jest":"^29.7.0","lint-staged":"^15.2.0","rimraf":"^5.0.5","ts-jest":"^29.1.1","typescript":"^5.3.3"},"peerDependencies":{"casbin":"^5.0.0","drizzle-orm":">=0.29.0"},"dependencies":{},"homepage":"https://casbin.org","repository":{"type":"git","url":"git+https://github.com/node-casbin/drizzle-adapter.git"},"keywords":["casbin","node-casbin","adapter","drizzle","drizzle-orm","access-control","authorization","auth","authz","acl","rbac","abac","orm"],"author":{"name":"Node-Casbin"},"licenses":[{"type":"Apache-2.0","url":"http://www.apache.org/licenses/LICENSE-2.0"}],"bugs":{"url":"https://github.com/node-casbin/drizzle-adapter/issues"},"lint-staged":{"*.{ts,tsx,js,jsx}":["eslint --fix","git add"]},"jest":{"testEnvironmentOptions":{"url":"http://localhost"},"transform":{"^.+\\.(ts|tsx)$":"ts-jest"},"testMatch":["**/test/*.test.+(ts|tsx)"],"moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"_id":"drizzle-adapter@1.4.0","gitHead":"9c5d3aef3143a08cc73c148b4745250be0608970","_nodeVersion":"20.19.6","_npmVersion":"10.9.4","dist":{"integrity":"sha512-UU4ZcGYIZeSSdfZaTlZBUNjQ+Aj1T64QsB/ayBsskHo6bRQiw5fbX3CSyc7yllTCZ+jE5207EKvwAJpHgT2nNw==","shasum":"02971d9027ad66307052c4e9ccc28c140ba39b83","tarball":"https://registry.npmjs.org/drizzle-adapter/-/drizzle-adapter-1.4.0.tgz","fileCount":11,"unpackedSize":56329,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDvVJ1Jizvs6p6VuzGJsh2q/3rGHnRF3mrYrMDnXs5iyQIhANMLB+LS4U5OLXiYt1Bz5TIZWWmPiEGH8TieLwp8aMWl"}]},"_npmUser":{"name":"hsluoyz","email":"hsluoyz@gmail.com"},"directories":{},"maintainers":[{"name":"hsluoyz","email":"hsluoyz@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/drizzle-adapter_1.4.0_1765986423376_0.15279524549333034"},"_hasShrinkwrap":false}},"time":{"created":"2025-11-26T01:11:54.413Z","modified":"2025-12-17T15:47:03.824Z","1.1.0":"2025-11-26T01:11:54.602Z","1.2.0":"2025-11-26T01:30:26.690Z","1.3.0":"2025-11-26T01:33:02.004Z","1.4.0":"2025-12-17T15:47:03.580Z"},"bugs":{"url":"https://github.com/node-casbin/drizzle-adapter/issues"},"author":{"name":"Node-Casbin"},"homepage":"https://casbin.org","keywords":["casbin","node-casbin","adapter","drizzle","drizzle-orm","access-control","authorization","auth","authz","acl","rbac","abac","orm"],"repository":{"type":"git","url":"git+https://github.com/node-casbin/drizzle-adapter.git"},"description":"Drizzle ORM adapter for Casbin","maintainers":[{"name":"hsluoyz","email":"hsluoyz@gmail.com"}],"readme":"Drizzle Adapter\n====\n[![CI](https://github.com/node-casbin/drizzle-adapter/actions/workflows/ci.yml/badge.svg)](https://github.com/node-casbin/drizzle-adapter/actions/workflows/ci.yml)\n[![Coverage Status](https://coveralls.io/repos/github/node-casbin/drizzle-adapter/badge.svg?branch=master)](https://coveralls.io/github/node-casbin/drizzle-adapter?branch=master)\n[![NPM version][npm-image]][npm-url]\n[![NPM download][download-image]][download-url]\n[![Discord](https://img.shields.io/discord/1022748306096537660?logo=discord&label=discord&color=5865F2)](https://discord.gg/S5UjpzGZjN)\n\n[npm-image]: https://img.shields.io/npm/v/drizzle-adapter.svg?style=flat-square\n[npm-url]: https://npmjs.com/package/drizzle-adapter\n[download-image]: https://img.shields.io/npm/dm/drizzle-adapter.svg?style=flat-square\n[download-url]: https://npmjs.com/package/drizzle-adapter\n\nDrizzle Adapter is the [Drizzle ORM](https://github.com/drizzle-team/drizzle-orm) adapter for [Node-Casbin](https://github.com/casbin/node-casbin). With this library, Node-Casbin can load policy from Drizzle ORM supported database or save policy to it.\n\nBased on [Officially Supported Databases](https://orm.drizzle.team/docs/overview), the current supported databases are:\n\n- PostgreSQL\n- MySQL\n- SQLite\n- Turso\n- Neon\n- PlanetScale\n- Vercel Postgres\n- Xata\n- And more...\n\n## Installation\n\n```bash\nnpm install drizzle-adapter\n# or\nyarn add drizzle-adapter\n```\n\n## Simple Example\n\n```typescript\nimport { newEnforcer } from 'casbin';\nimport { drizzle } from 'drizzle-orm/better-sqlite3';\nimport Database from 'better-sqlite3';\nimport DrizzleAdapter, { casbinRuleSqlite } from 'drizzle-adapter';\n\nasync function myFunction() {\n    // Initialize a SQLite database\n    const sqlite = new Database('casbin.db');\n    const db = drizzle(sqlite);\n    \n    // Create the casbin_rule table if it doesn't exist\n    db.run(`\n        CREATE TABLE IF NOT EXISTS casbin_rule (\n            id INTEGER PRIMARY KEY AUTOINCREMENT,\n            ptype TEXT,\n            v0 TEXT,\n            v1 TEXT,\n            v2 TEXT,\n            v3 TEXT,\n            v4 TEXT,\n            v5 TEXT\n        )\n    `);\n\n    // Initialize a Drizzle adapter and use it in a Node-Casbin enforcer\n    const a = await DrizzleAdapter.newAdapter({\n        db: db,\n        table: casbinRuleSqlite,\n    });\n\n    const e = await newEnforcer('examples/rbac_model.conf', a);\n\n    // Load the policy from DB.\n    await e.loadPolicy();\n\n    // Check the permission.\n    await e.enforce('alice', 'data1', 'read');\n\n    // Modify the policy.\n    // await e.addPolicy(...);\n    // await e.removePolicy(...);\n\n    // Save the policy back to DB.\n    await e.savePolicy();\n}\n```\n\n## PostgreSQL Example\n\n```typescript\nimport { newEnforcer } from 'casbin';\nimport { drizzle } from 'drizzle-orm/node-postgres';\nimport { Pool } from 'pg';\nimport DrizzleAdapter, { casbinRulePostgres } from 'drizzle-adapter';\n\nasync function myFunction() {\n    // Initialize a PostgreSQL connection\n    const pool = new Pool({\n        host: 'localhost',\n        port: 5432,\n        user: 'postgres',\n        password: 'password',\n        database: 'casbin',\n    });\n    const db = drizzle(pool);\n\n    // Initialize a Drizzle adapter\n    const a = await DrizzleAdapter.newAdapter({\n        db: db,\n        table: casbinRulePostgres,\n    });\n\n    const e = await newEnforcer('examples/rbac_model.conf', a);\n\n    // Load the policy from DB.\n    await e.loadPolicy();\n\n    // Check the permission.\n    await e.enforce('alice', 'data1', 'read');\n}\n```\n\n## MySQL Example\n\n```typescript\nimport { newEnforcer } from 'casbin';\nimport { drizzle } from 'drizzle-orm/mysql2';\nimport mysql from 'mysql2/promise';\nimport DrizzleAdapter, { casbinRuleMysql } from 'drizzle-adapter';\n\nasync function myFunction() {\n    // Initialize a MySQL connection\n    const connection = await mysql.createConnection({\n        host: 'localhost',\n        port: 3306,\n        user: 'root',\n        password: 'password',\n        database: 'casbin',\n    });\n    const db = drizzle(connection);\n\n    // Initialize a Drizzle adapter\n    const a = await DrizzleAdapter.newAdapter({\n        db: db,\n        table: casbinRuleMysql,\n    });\n\n    const e = await newEnforcer('examples/rbac_model.conf', a);\n\n    // Load the policy from DB.\n    await e.loadPolicy();\n\n    // Check the permission.\n    await e.enforce('alice', 'data1', 'read');\n}\n```\n\n## Filtered Policy Example\n\n```typescript\nimport { newEnforcer } from 'casbin';\nimport { drizzle } from 'drizzle-orm/better-sqlite3';\nimport Database from 'better-sqlite3';\nimport DrizzleAdapter, { casbinRuleSqlite } from 'drizzle-adapter';\n\nasync function myFunction() {\n    const sqlite = new Database('casbin.db');\n    const db = drizzle(sqlite);\n\n    const a = await DrizzleAdapter.newAdapter({\n        db: db,\n        table: casbinRuleSqlite,\n    });\n\n    const e = await newEnforcer('examples/rbac_model.conf', a);\n\n    // Load the filtered policy from DB.\n    await e.loadFilteredPolicy({\n        'ptype': 'p',\n        'v0': 'alice'\n    });\n\n    // Check the permission.\n    await e.enforce('alice', 'data1', 'read');\n}\n```\n\n## Custom Table Schema\n\nYou can create a custom table schema if you need additional fields or different column names:\n\n```typescript\nimport { sqliteTable, text, integer } from 'drizzle-orm/sqlite-core';\nimport DrizzleAdapter from 'drizzle-adapter';\n\n// Define a custom table schema\nconst customCasbinRule = sqliteTable('my_casbin_rules', {\n    id: integer('id').primaryKey({ autoIncrement: true }),\n    ptype: text('ptype'),\n    v0: text('v0'),\n    v1: text('v1'),\n    v2: text('v2'),\n    v3: text('v3'),\n    v4: text('v4'),\n    v5: text('v5'),\n});\n\nasync function myFunction() {\n    const sqlite = new Database('casbin.db');\n    const db = drizzle(sqlite);\n\n    const a = await DrizzleAdapter.newAdapter({\n        db: db,\n        table: customCasbinRule,\n    });\n\n    const e = await newEnforcer('examples/rbac_model.conf', a);\n    await e.loadPolicy();\n}\n```\n\n## API Reference\n\n### DrizzleAdapter\n\n#### `newAdapter(options: DrizzleAdapterOptions): Promise<DrizzleAdapter>`\n\nCreates a new Drizzle adapter instance.\n\n**Options:**\n- `db`: Drizzle database instance\n- `table`: (Optional) Drizzle table schema. Defaults to `casbinRuleSqlite`\n\n#### `loadPolicy(model: Model): Promise<void>`\n\nLoads all policy rules from the database.\n\n#### `loadFilteredPolicy(model: Model, filter: FilterOptions): Promise<void>`\n\nLoads policy rules that match the filter from the database.\n\n**FilterOptions:**\n- `ptype`: Policy type (e.g., 'p', 'g')\n- `v0` to `v5`: Policy values\n\n#### `savePolicy(model: Model): Promise<boolean>`\n\nSaves all policy rules to the database (clears existing policies first).\n\n#### `addPolicy(sec: string, ptype: string, rule: string[]): Promise<void>`\n\nAdds a policy rule to the database.\n\n#### `addPolicies(sec: string, ptype: string, rules: string[][]): Promise<void>`\n\nAdds multiple policy rules to the database.\n\n#### `removePolicy(sec: string, ptype: string, rule: string[]): Promise<void>`\n\nRemoves a policy rule from the database.\n\n#### `removePolicies(sec: string, ptype: string, rules: string[][]): Promise<void>`\n\nRemoves multiple policy rules from the database.\n\n#### `removeFilteredPolicy(sec: string, ptype: string, fieldIndex: number, ...fieldValues: string[]): Promise<void>`\n\nRemoves policy rules that match the filter from the database.\n\n#### `updatePolicy(sec: string, ptype: string, oldRule: string[], newRule: string[]): Promise<void>`\n\nUpdates a policy rule in the database.\n\n#### `isFiltered(): boolean`\n\nReturns whether the loaded policy has been filtered.\n\n## Getting Help\n\n- [Node-Casbin](https://github.com/casbin/node-casbin)\n- [Drizzle ORM](https://github.com/drizzle-team/drizzle-orm)\n\n## License\n\nThis project is under Apache 2.0 License. See the [LICENSE](LICENSE) file for the full license text.","readmeFilename":"README.md"}