{"_id":"@ekalkutin/casbin-prisma-adapter","name":"@ekalkutin/casbin-prisma-adapter","dist-tags":{"latest":"1.9.0"},"versions":{"1.9.0":{"name":"@ekalkutin/casbin-prisma-adapter","version":"1.9.0","description":"Prisma adapter for Casbin","main":"lib/adapter.js","typings":"lib/adapter.d.ts","scripts":{"build":"rimraf lib && npx prisma generate && tsc","lint":"eslint --ext .ts src/ test/","format":"npm run format:check -- --write","format:check":"prettier --check \"**/*.{md,json}\" \"{src,test}/**/*.ts\"","test":"jest --forceExit"},"devDependencies":{"@prisma/client":"^7.2.0","@semantic-release/git":"^10.0.1","@types/jest":"^29.0.0","@types/node":"^22.10.1","@typescript-eslint/eslint-plugin":"^3.4.0","@typescript-eslint/parser":"^3.4.0","casbin":"^5.16.0","eslint":"^7.3.1","eslint-config-prettier":"^6.11.0","jest":"^29.0.0","prettier":"^2.7.1","prisma":"^7.2.0","rimraf":"^3.0.2","semantic-release":"^19.0.3","ts-jest":"^29.0.0","ts-node":"^10.9.1","typescript":"^5.1.6"},"peerDependencies":{"@prisma/client":"^7.2.0","casbin":"^5.16.0","prisma":"^7.2.0"},"jest":{"testEnvironment":"node","transform":{"^.+\\.(ts|tsx)$":"ts-jest"},"testMatch":["**/test/*.+(ts|tsx)"],"moduleFileExtensions":["ts","tsx","js","jsx","json","node"]},"dependencies":{"@prisma/adapter-pg":"^7.2.0","@types/pg":"^8.16.0","pg":"^8.17.1"},"_id":"@ekalkutin/casbin-prisma-adapter@1.9.0","gitHead":"c7e0a965afd8a3f23780afcdb9dfdd137d2e5040","_nodeVersion":"22.21.1","_npmVersion":"10.9.4","dist":{"integrity":"sha512-rPiX34qN6PcnA84fQU/WeocDqK6GPEO4cFYf2TrhPDn59111iuRz9/Ds+IkNbSXzseNFlDqufBcqLkSWkCjqjw==","shasum":"c020465a068feaff3df83b99ad360b6c487b7cd9","tarball":"https://registry.npmjs.org/@ekalkutin/casbin-prisma-adapter/-/casbin-prisma-adapter-1.9.0.tgz","fileCount":10,"unpackedSize":35648,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIA3nrY/TDhYvDnTBmwLw66aKiQSESM4BxLn0t32vd/N/AiEAzQWCFca8VTuoNbovsVc3TOoXes3LbXNKNYh1uYnZVo4="}]},"_npmUser":{"name":"ekalkutin","email":"evgenii.kalkutin@gmail.com"},"directories":{},"maintainers":[{"name":"ekalkutin","email":"evgenii.kalkutin@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/casbin-prisma-adapter_1.9.0_1768815484488_0.5844240701200736"},"_hasShrinkwrap":false}},"time":{"created":"2026-01-19T09:38:04.393Z","1.9.0":"2026-01-19T09:38:04.629Z","modified":"2026-01-19T09:38:04.839Z"},"maintainers":[{"name":"ekalkutin","email":"evgenii.kalkutin@gmail.com"}],"description":"Prisma adapter for Casbin","readme":"# Prisma Adapter\n\n[![NPM version][npm-image]][npm-url]\n[![NPM download][download-image]][download-url]\n[![Build Status][ci-image]][ci-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/casbin-prisma-adapter.svg\n[npm-url]: https://npmjs.org/package/casbin-prisma-adapter\n[download-image]: https://img.shields.io/npm/dm/casbin-prisma-adapter.svg\n[download-url]: https://npmjs.org/package/casbin-prisma-adapter\n[ci-image]: https://github.com/node-casbin/prisma-adapter/workflows/ci/badge.svg?branch=master\n[ci-url]: https://github.com/node-casbin/prisma-adapter/actions\n\nPrisma Adapter is the [Prisma](https://github.com/prisma/prisma) adapter for [Node-Casbin](https://github.com/casbin/node-casbin). With this library, Node-Casbin can load policy from Prisma supported database or save policy to it.\n\nBased on [Officially Supported Databases](https://www.prisma.io/docs/), the current supported databases are:\n\n- PostgreSQL\n- MySQL\n- SQLite\n- MongoDB\n\nYou may find other 3rd-party supported DBs in Prisma website or other places.\n\n## Installation\n\n```\nnpm install casbin-prisma-adapter --save\n```\n\n## Getting Started\n\nAppend the following content to your `schema.prisma`:\n\n```prisma\nmodel CasbinRule {\n  id    Int     @id @default(autoincrement())\n  ptype String\n  v0    String?\n  v1    String?\n  v2    String?\n  v3    String?\n  v4    String?\n  v5    String?\n\n  @@map(\"casbin_rule\")\n}\n```\n\nCreate table(MySQL):\n\n```sql\nCREATE TABLE IF NOT EXISTS `casbin_rule` (\n  `id` int NOT NULL AUTO_INCREMENT,\n  `ptype` varchar(255) DEFAULT NULL,\n  `v0` varchar(255) DEFAULT NULL,\n  `v1` varchar(255) DEFAULT NULL,\n  `v2` varchar(255) DEFAULT NULL,\n  `v3` varchar(255) DEFAULT NULL,\n  `v4` varchar(255) DEFAULT NULL,\n  `v5` varchar(255) DEFAULT NULL,\n  PRIMARY KEY (`id`)\n);\n```\n\nHere is a simple example:\n\n```ts\nimport casbin from 'casbin';\nimport { PrismaAdapter } from 'casbin-prisma-adapter';\n\nasync function main() {\n  const a = await PrismaAdapter.newAdapter();\n  // Or:\n  // const prisma = new PrismaClient();\n  // const a = await PrismaAdapter.newAdapter(prisma);\n\n  const e = await casbin.newEnforcer('examples/rbac_model.conf', a);\n\n  // Check the permission.\n  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\nmain();\n```\n\n## Using Custom Prisma Client Output Path (Prisma v7+)\n\nIf you're using a custom output path for your Prisma client (e.g., generating the client to `./src/generated/client`), you must pass your PrismaClient instance to the adapter:\n\n```prisma\n// schema.prisma\ngenerator client {\n  provider = \"prisma-client-js\"\n  output   = \"./src/generated/client\"\n}\n```\n\n```ts\nimport casbin from 'casbin';\nimport { PrismaAdapter } from 'casbin-prisma-adapter';\nimport { PrismaClient } from './src/generated/client'; // Your custom path\n\nasync function main() {\n  const prisma = new PrismaClient();\n  const a = await PrismaAdapter.newAdapter(prisma);\n\n  const e = await casbin.newEnforcer('examples/rbac_model.conf', a);\n\n  // Check the permission.\n  e.enforce('alice', 'data1', 'read');\n\n  // Save the policy back to DB.\n  await e.savePolicy();\n}\n\nmain();\n```\n\n**Important**: When using custom output paths, you must always pass a PrismaClient instance to the adapter. The adapter will attempt to dynamically import from `@prisma/client` only when no instance is provided and the adapter is initialized.\n\n## Getting Help\n\n- [Node-Casbin](https://github.com/casbin/node-casbin)\n\n## License\n\nThis project is under Apache 2.0 License. See the [LICENSE](LICENSE) file for the full license text.\n","readmeFilename":"README.md","_rev":"1-b85a1dcbad9cfb23482ea74877147299"}