{"_id":"@anpdgovbr/rbac-prisma","_rev":"10-3bdcc54ce25b94a2f517d50ed727763b","name":"@anpdgovbr/rbac-prisma","dist-tags":{"beta":"0.1.1-beta.4","latest":"0.2.0"},"versions":{"0.1.0-beta.0":{"name":"@anpdgovbr/rbac-prisma","version":"0.1.0-beta.0","license":"MIT","_id":"@anpdgovbr/rbac-prisma@0.1.0-beta.0","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"e07ed27a80cd1af2b789c5ced1d4bd32fde1008b","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-prisma/-/rbac-prisma-0.1.0-beta.0.tgz","fileCount":6,"integrity":"sha512-v1TIzKjTZ8u84SuvdO3Z2UUimq93UuwxZ/RPJB2otDXUlV1Fy/6Y3ADWbCfaoXj2Nd5CCICAiEBsMpEaaGYtpw==","signatures":[{"sig":"MEYCIQCzmVj+5k6VQqpDyYYN0sJxYfunJwkY/3iDC+Bz+gCCrAIhAOvduzADvG7iwVwFTAnQYPFLFLmUnQgPnNipUZ5+q8go","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6811},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","private":false,"scripts":{"test":"node --test dist/test","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Provider Prisma para RBAC (herança de perfis e união por grant verdadeiro).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.0","@anpdgovbr/rbac-provider":"^0.1.0-beta.0"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-prisma_0.1.0-beta.0_1756742654010_0.3372005373411595","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.1":{"name":"@anpdgovbr/rbac-prisma","version":"0.1.0-beta.1","license":"MIT","_id":"@anpdgovbr/rbac-prisma@0.1.0-beta.1","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"02edb3a2d53814dea055027964ad09ea5aca1353","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-prisma/-/rbac-prisma-0.1.0-beta.1.tgz","fileCount":6,"integrity":"sha512-5+32/M8dgxF/+7tEEl1mcx62m0od/kKbNbt9U9hzyYwOMOV1Eh4Mo3WMe5gSEvNqLPbAj/dpwydIww1ur4yx4w==","signatures":[{"sig":"MEYCIQDGmo9GhFeS9R1xWlje8SJA46vjWeXyovPcLEmzztHNBgIhAJPg6vG1sQHq3zlNZv1fmAEpAkaXfjFbpZNAwr7ZHMSI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":6819},"main":"dist/index.js","type":"module","types":"dist/index.d.ts","private":false,"scripts":{"test":"node --test dist/test","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Provider Prisma para RBAC (herança de perfis e união por grant verdadeiro).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.1","@anpdgovbr/rbac-provider":"^0.1.0-beta.1"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-prisma_0.1.0-beta.1_1756743542784_0.07639896820865388","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.2":{"name":"@anpdgovbr/rbac-prisma","version":"0.1.0-beta.2","license":"MIT","_id":"@anpdgovbr/rbac-prisma@0.1.0-beta.2","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"973e802f3d625e24203fbcc24b78d66a4bf0184b","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-prisma/-/rbac-prisma-0.1.0-beta.2.tgz","fileCount":6,"integrity":"sha512-HvZNPbJleKGXYv3KodST1CAN9blQZFmc6OAYSyWnizx+xwCi7Gydv6lDxEE0pbbNGHcRUkBn4WDauynbxZosMg==","signatures":[{"sig":"MEUCIQCdiDhzSNN6lM+c7tf8QdC7nFklJwN0ENRMmRMneVxXMQIgbxD5IJvqbh3adtEuJBvqHxQBuaRlp/fCaHASFlFZGPs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":7000},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"private":false,"scripts":{"test":"node --test dist/test","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Provider Prisma para RBAC (herança de perfis e união por grant verdadeiro).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.2","@anpdgovbr/rbac-provider":"^0.1.0-beta.2"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-prisma_0.1.0-beta.2_1756747595782_0.4253056450091537","host":"s3://npm-registry-packages-npm-production"}},"0.1.0-beta.3":{"name":"@anpdgovbr/rbac-prisma","version":"0.1.0-beta.3","license":"MIT","_id":"@anpdgovbr/rbac-prisma@0.1.0-beta.3","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"59ea66e1c5f78387b469c59b09dbf576d59daac0","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-prisma/-/rbac-prisma-0.1.0-beta.3.tgz","fileCount":6,"integrity":"sha512-LQmO4LhXXEv8opCDEcEnGMs293ThJqYDsZW201xmLnfVWcJMfxYGAXy6+9mmQklw5sRMQyt5uIjR6sXfcXpztw==","signatures":[{"sig":"MEUCIHsvXCer5IbS9Ws6gtswl9cSul2aRZCs7nlBdotPj8jiAiEAryNjR0e8oIINDKR4NnCb1XH+fzbNZj2WOEGLyYlg0PM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28114},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"private":false,"scripts":{"test":"node --test dist/test","build":"tsc -p tsconfig.json","typecheck":"tsc -p tsconfig.json --noEmit"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Provider Prisma para RBAC (herança de perfis e união por grant verdadeiro).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.3","@anpdgovbr/rbac-provider":"^0.1.0-beta.3"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-prisma_0.1.0-beta.3_1756757703240_0.6051870129887629","host":"s3://npm-registry-packages-npm-production"}},"0.1.1-beta.3":{"name":"@anpdgovbr/rbac-prisma","version":"0.1.1-beta.3","license":"MIT","_id":"@anpdgovbr/rbac-prisma@0.1.1-beta.3","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"3e8c1aa26d73b9d7cd1064bfcdca9d49e94f48e3","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-prisma/-/rbac-prisma-0.1.1-beta.3.tgz","fileCount":6,"integrity":"sha512-Dh8og+/QrEi8/Oa6KPfNcl5HahgHchHCtsxgOhCwpQMHBeCSbQ0iqVJ0nxUWtaEk84ljMS4erLGbkGtcl+MR3Q==","signatures":[{"sig":"MEUCIEgkB23h81Ql/jJBzyp6KNoB7OuH9dXkanrnpd+cFa70AiEAhGx34y57IrODL8Yn6RCkfpcYY1WDqc9cD3QC6NUh+oI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28192},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"private":false,"scripts":{"ncu":"ncu","test":"node --test dist/test","build":"tsc -p tsconfig.json","ncu:check":"ncu","typecheck":"tsc -p tsconfig.json --noEmit","ncu:update":"ncu -u"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Provider Prisma para RBAC (herança de perfis e união por grant verdadeiro).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.0-beta.3","@anpdgovbr/rbac-provider":"^0.1.0-beta.3"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.4.0"},"_npmOperationalInternal":{"tmp":"tmp/rbac-prisma_0.1.1-beta.3_1756760613176_0.43475332586535753","host":"s3://npm-registry-packages-npm-production"}},"0.1.1-beta.4":{"name":"@anpdgovbr/rbac-prisma","version":"0.1.1-beta.4","license":"MIT","_id":"@anpdgovbr/rbac-prisma@0.1.1-beta.4","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"e232c5505d37059c00bd0f8846687f5f43525c76","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-prisma/-/rbac-prisma-0.1.1-beta.4.tgz","fileCount":8,"integrity":"sha512-SwnUr/VSAFLNn8BxnUXFAbtjI4ERq4vjpJgjiqSzqWhtMgeTqj0CRGSHf8sUcmcR/MPKf3eZQDDIt6YsCmz4yw==","signatures":[{"sig":"MEYCIQC9ISHBt/Qaj4S3+xp9MUU1u+BTvZUEoiqDhRpZyakAtwIhALLaCMi2pW4yos/nW4BCKBJOLsWEjnb19SMf5hJEkPdx","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31900},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"private":false,"scripts":{"ncu":"ncu","test":"node --test 'dist/**/*.test.js'","build":"tsc -p tsconfig.json","ncu:check":"ncu","typecheck":"tsc -p tsconfig.json --noEmit","ncu:update":"ncu -u"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"10.9.2","description":"Provider Prisma para RBAC (herança de perfis e união por grant verdadeiro).","directories":{},"sideEffects":false,"_nodeVersion":"22.17.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.1-beta.4","@anpdgovbr/rbac-provider":"^0.1.1-beta.4"},"publishConfig":{"tag":"beta","access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/rbac-prisma_0.1.1-beta.4_1756784287634_0.11357368227201903","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@anpdgovbr/rbac-prisma","version":"0.1.2","license":"MIT","_id":"@anpdgovbr/rbac-prisma@0.1.2","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"ff6d4a1ae0caf684a0ff06e05aab43c258a938c8","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-prisma/-/rbac-prisma-0.1.2.tgz","fileCount":8,"integrity":"sha512-xkQEJPpwrayHnpBBfBz2DzAk+LFx4/SOojeQx9tJU/GehcRJXS/GaNrIXp0PkzxhB/CCD9eOevfLJgfwNE8AEA==","signatures":[{"sig":"MEYCIQDCwBFGtSZIYKpTFnYqbBItv/JdIxkoXZe2Osb9VnR+QgIhAOF4C0wbUUsR77hysq+g4jTTibSyT9dLPTn9zuWJHh8m","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31760},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"825d30b22d80fef90a94b9c66cf4994fc41c9111","private":false,"scripts":{"ncu":"ncu","test":"node --test dist/test/*.test.js","build":"tsc -p tsconfig.json","ncu:check":"ncu","typecheck":"tsc -p tsconfig.json --noEmit","ncu:update":"ncu -u"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.5.1","description":"Provider Prisma para RBAC (herança de perfis e união por grant verdadeiro).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.2","@anpdgovbr/rbac-provider":"^0.1.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.2"},"_npmOperationalInternal":{"tmp":"tmp/rbac-prisma_0.1.2_1756842699414_0.0347013124888671","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@anpdgovbr/rbac-prisma","version":"0.1.3","license":"MIT","_id":"@anpdgovbr/rbac-prisma@0.1.3","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"homepage":"https://github.com/anpdgovbr/rbac#readme","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"dist":{"shasum":"578af4b6c55c0059ce69f7b16cf07a53d3fdce5d","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-prisma/-/rbac-prisma-0.1.3.tgz","fileCount":8,"integrity":"sha512-PRPBkTGddAYcVWj2sTbxWBiwkExJbOA473oPGoXQfR4RTesMyTWdjaz6ox0qiIlLYVJH/qBaYwBdE4dH0bHfTw==","signatures":[{"sig":"MEQCIC9/8yenGw5ozCGdBpinRBcI15YnSN+Sj3SaMWh2kO5/AiBkElMR4K0dw+hFQ/0C2ckaJCJGQAO8hGmCQndnxAHNBg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":31758},"main":"dist/src/index.js","type":"module","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"gitHead":"03af2a5a0454322fe025bc309c97d5e411eb248c","private":false,"scripts":{"ncu":"ncu","test":"node --test dist/test/*.test.js","build":"tsc -p tsconfig.json","ncu:check":"ncu","typecheck":"tsc -p tsconfig.json --noEmit","ncu:update":"ncu -u"},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"repository":{"url":"git+https://github.com/anpdgovbr/rbac.git","type":"git"},"_npmVersion":"11.6.2","description":"Provider Prisma para RBAC (herança de perfis e união por grant verdadeiro).","directories":{},"sideEffects":false,"_nodeVersion":"24.7.0","dependencies":{"@anpdgovbr/rbac-core":"^0.1.4","@anpdgovbr/rbac-provider":"^0.1.3"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.9.3"},"_npmOperationalInternal":{"tmp":"tmp/rbac-prisma_0.1.3_1759974745035_0.08242645687192574","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@anpdgovbr/rbac-prisma","version":"0.2.0","private":false,"type":"module","main":"dist/src/index.js","types":"dist/src/index.d.ts","exports":{".":{"types":"./dist/src/index.d.ts","import":"./dist/src/index.js"}},"sideEffects":false,"description":"Provider Prisma para RBAC (herança de perfis e união por grant verdadeiro).","license":"MIT","repository":{"type":"git","url":"git+https://github.com/anpdgovbr/rbac.git"},"publishConfig":{"access":"public"},"dependencies":{"@anpdgovbr/rbac-core":"^0.1.4","@anpdgovbr/rbac-provider":"^0.1.3"},"devDependencies":{"@types/node":"^20.19.24","typescript":"^5.9.3"},"scripts":{"build":"tsc --build","typecheck":"tsc --build --noEmit","test":"node --test dist/test/*.test.js","ncu":"ncu","ncu:check":"ncu","ncu:update":"ncu -u"},"_id":"@anpdgovbr/rbac-prisma@0.2.0","bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"homepage":"https://github.com/anpdgovbr/rbac#readme","_integrity":"sha512-d6RR7MwJYm/XNhymegQvAlqtsVNaMoflqTKQ4QPkhFqVkEZ6eBJAkVg7VfOP0KHUxnGrUZNY52J4PMGLPkGm+A==","_resolved":"/tmp/f991ef71919819d37f57efe36c3b2924/anpdgovbr-rbac-prisma-0.2.0.tgz","_from":"file:anpdgovbr-rbac-prisma-0.2.0.tgz","_nodeVersion":"24.7.0","_npmVersion":"11.6.2","dist":{"integrity":"sha512-d6RR7MwJYm/XNhymegQvAlqtsVNaMoflqTKQ4QPkhFqVkEZ6eBJAkVg7VfOP0KHUxnGrUZNY52J4PMGLPkGm+A==","shasum":"539a1295f3bb585ee6db8164cbb48a9a2afaed47","tarball":"https://registry.npmjs.org/@anpdgovbr/rbac-prisma/-/rbac-prisma-0.2.0.tgz","fileCount":10,"unpackedSize":67933,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDb1v/mTvpYC/wyECNxxzaKMUMJm/1m02fpTPLYKKRl7AIgS0NMq8680bKklfywQ6JYpguheuB9mdiVsmoaf4wE3Lw="}]},"_npmUser":{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"},"directories":{},"maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rbac-prisma_0.2.0_1762022402676_0.1769087524324331"},"_hasShrinkwrap":false}},"time":{"created":"2025-09-01T16:04:13.896Z","modified":"2025-11-01T18:40:03.072Z","0.1.0-beta.0":"2025-09-01T16:04:14.192Z","0.1.0-beta.1":"2025-09-01T16:19:02.964Z","0.1.0-beta.2":"2025-09-01T17:26:35.952Z","0.1.0-beta.3":"2025-09-01T20:15:03.417Z","0.1.1-beta.3":"2025-09-01T21:03:33.405Z","0.1.1-beta.4":"2025-09-02T03:38:07.811Z","0.1.2":"2025-09-02T19:51:39.585Z","0.1.3":"2025-10-09T01:52:25.220Z","0.2.0":"2025-11-01T18:40:02.862Z"},"bugs":{"url":"https://github.com/anpdgovbr/rbac/issues"},"license":"MIT","homepage":"https://github.com/anpdgovbr/rbac#readme","repository":{"type":"git","url":"git+https://github.com/anpdgovbr/rbac.git"},"description":"Provider Prisma para RBAC (herança de perfis e união por grant verdadeiro).","maintainers":[{"name":"lucianoedipo","email":"lucianoedipo@gmail.com"}],"readme":"# @anpdgovbr/rbac-prisma\n\n[![npm version](https://img.shields.io/npm/v/@anpdgovbr/rbac-prisma.svg)](https://www.npmjs.com/package/@anpdgovbr/rbac-prisma)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5.4+-blue.svg)](https://www.typescriptlang.org/)\n[![Prisma](https://img.shields.io/badge/Prisma-5+-2D3748.svg)](https://www.prisma.io/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n**Provider Prisma para RBAC** — Implementação completa do sistema de permissões com herança de perfis e união por grant verdadeiro.\n\n## ✨ Características\n\n- 🏗️ **Herança de Perfis** — Suporte completo a hierarquias complexas (DAG)\n- ✅ **União por Grant Verdadeiro** — Se qualquer perfil ancestral permite, a permissão é concedida\n- 🎯 **Type Safety** — Integração tipada com Prisma Client\n- ⚡ **Performance** — Queries otimizadas com eager loading\n- 🔧 **Configurável** — Nomes de tabelas customizáveis\n\n## 📦 Instalação\n\n```bash\nnpm install @anpdgovbr/rbac-prisma@beta\n```\n\n**Peer Dependencies:**\n\n```bash\nnpm install @prisma/client\n```\n\n## 🗄️ Schema de Banco\n\n### Estrutura Mínima Requerida\n\n```prisma\nmodel User {\n  id       String  @id @default(cuid())\n  email    String  @unique\n  perfilId String?\n  perfil   Perfil? @relation(fields: [perfilId], references: [id])\n}\n\nmodel Perfil {\n  id         String           @id @default(cuid())\n  nome       String           @unique\n  active     Boolean          @default(true)\n  users      User[]\n  permissoes Permissao[]\n\n  // Herança: este perfil herda de (parents)\n  parents    PerfilHeranca[]  @relation(\"PerfilChild\")\n  // Herança: este perfil é herdado por (children)\n  children   PerfilHeranca[]  @relation(\"PerfilParent\")\n}\n\nmodel Permissao {\n  id        String  @id @default(cuid())\n  acao      String\n  recurso   String\n  permitido Boolean @default(true)\n  perfilId  String\n  perfil    Perfil  @relation(fields: [perfilId], references: [id])\n\n  @@unique([acao, recurso, perfilId])\n}\n\nmodel PerfilHeranca {\n  parentId String\n  childId  String\n  parent   Perfil @relation(\"PerfilParent\", fields: [parentId], references: [id])\n  child    Perfil @relation(\"PerfilChild\", fields: [childId], references: [id])\n\n  @@id([parentId, childId])\n}\n```\n\n## 🎯 Uso Básico\n\n### Configuração Simples\n\n```typescript\nimport { createPrismaPermissionsProvider } from \"@anpdgovbr/rbac-prisma\"\nimport { PrismaClient } from \"@prisma/client\"\n\nconst prisma = new PrismaClient()\n\nconst provider = createPrismaPermissionsProvider({\n  prisma,\n  // Configuração padrão:\n  // identityField: \"email\"\n  // tables: { user: \"user\", perfil: \"perfil\", etc. }\n})\n\n// Uso\nconst permissions = await provider.getPermissionsByIdentity(\"user@gov.br\")\n```\n\n### Com Cache TTL\n\n```typescript\nimport { withTTLCache } from \"@anpdgovbr/rbac-provider\"\n\nconst cachedProvider = withTTLCache(\n  createPrismaPermissionsProvider({ prisma }),\n  5 * 60 * 1000 // 5 minutos\n)\n```\n\n### Configuração Customizada\n\n```typescript\nconst provider = createPrismaPermissionsProvider({\n  prisma,\n  identityField: \"id\", // usar ID em vez de email\n  tables: {\n    user: \"usuarios\",\n    perfil: \"perfis\",\n    permissao: \"permissoes\",\n    perfilHeranca: \"perfil_heranca\",\n  },\n})\n```\n\n## 🔧 API Completa\n\n### `createPrismaPermissionsProvider(options)`\n\nCria um provider baseado em Prisma Client.\n\n```typescript\ninterface PrismaRbacOptions {\n  prisma: PrismaLike\n  tables?: {\n    perfil?: string // padrão: \"perfil\"\n    permissao?: string // padrão: \"permissao\"\n    perfilHeranca?: string // padrão: \"perfilHeranca\"\n    user?: string // padrão: \"user\"\n  }\n  identityField?: \"email\" | \"id\" // padrão: \"email\"\n}\n```\n\n**Parâmetros:**\n\n- `prisma: PrismaLike` — Instância do Prisma Client\n- `tables?` — Mapeamento de nomes de tabelas customizados\n- `identityField?` — Campo usado para identificar usuário\n\n### `getPerfisHerdadosNomes(prisma, perfilNome, tables?)`\n\nResolve hierarquia de herança de um perfil específico.\n\n```typescript\nconst perfisHerdados = await getPerfisHerdadosNomes(prisma, \"Administrador\")\n// [\"Administrador\", \"Supervisor\", \"Usuario\"]\n```\n\n**Algoritmo:**\n\n1. Busca perfil base por nome\n2. Valida se está ativo\n3. Traversa grafo de herança (BFS)\n4. Previne ciclos infinitos\n5. Retorna lista de nomes válidos\n\n### `getPermissoesPorPerfil(prisma, perfilNome, tables?)`\n\nObtém permissões efetivas considerando herança.\n\n```typescript\nconst permissoes = await getPermissoesPorPerfil(prisma, \"Supervisor\")\n// [\n//   { acao: \"Exibir\", recurso: \"Relatorios\", permitido: true },\n//   { acao: \"Criar\", recurso: \"Relatorios\", permitido: false },\n//   ...\n// ]\n```\n\n**Lógica de União:**\n\n- Se qualquer perfil ancestral **permite** → permissão é `true`\n- Se todos **negam** ou não existe → permissão é `false`\n- Última regra vence em caso de conflito\n\n## 🧪 Exemplos Avançados\n\n### Hierarquia Complexa\n\n```\nAdministrador\n├── Supervisor\n│   ├── Analista Senior\n│   └── Analista Pleno\n└── Auditor\n    └── Auditor Junior\n```\n\n```typescript\n// Setup da hierarquia\nawait prisma.perfilHeranca.createMany({\n  data: [\n    { parentId: adminId, childId: supervisorId },\n    { parentId: adminId, childId: auditorId },\n    { parentId: supervisorId, childId: analistaSeniorId },\n    { parentId: supervisorId, childId: analistaPlenoId },\n    { parentId: auditorId, childId: auditorJuniorId },\n  ],\n})\n\n// Analista Pleno herda de: Supervisor → Administrador\nconst permissoes = await getPermissoesPorPerfil(prisma, \"Analista Pleno\")\n```\n\n### Provider com Logging\n\n```typescript\nimport { PermissionsProvider } from \"@anpdgovbr/rbac-provider\"\n\nclass LoggedPrismaProvider implements PermissionsProvider {\n  constructor(private base: PermissionsProvider) {}\n\n  async getPermissionsByIdentity(identity: string) {\n    console.log(`[RBAC] Resolving permissions for: ${identity}`)\n    const start = Date.now()\n\n    try {\n      const result = await this.base.getPermissionsByIdentity(identity)\n      const duration = Date.now() - start\n\n      console.log(\n        `[RBAC] ✅ Resolved ${Object.keys(result).length} actions in ${duration}ms`\n      )\n      return result\n    } catch (error) {\n      console.error(`[RBAC] ❌ Failed to resolve permissions:`, error)\n      throw error\n    }\n  }\n\n  invalidate(identity?: string) {\n    console.log(\n      `[RBAC] 🗑️  Invalidating cache${identity ? ` for ${identity}` : \" (all)\"}`\n    )\n    this.base.invalidate(identity)\n  }\n}\n\nconst provider = new LoggedPrismaProvider(createPrismaPermissionsProvider({ prisma }))\n```\n\n### Validação de Schema\n\n```typescript\n// Verificar se schema está correto\nasync function validateSchema(prisma: PrismaClient) {\n  try {\n    // Testa se todas as tabelas/campos existem\n    await prisma.user.findFirst()\n    await prisma.perfil.findFirst()\n    await prisma.permissao.findFirst()\n    await prisma.perfilHeranca.findFirst()\n\n    console.log(\"✅ Schema RBAC válido\")\n  } catch (error) {\n    console.error(\"❌ Schema RBAC inválido:\", error)\n    throw new Error(\"Schema incompatível com @anpdgovbr/rbac-prisma\")\n  }\n}\n```\n\n## 🚀 Performance\n\n### Query Optimization\n\nO provider executa queries otimizadas:\n\n```sql\n-- Busca usuário com perfil (eager loading)\nSELECT u.*, p.* FROM users u\nLEFT JOIN perfis p ON u.perfilId = p.id\nWHERE u.email = ?\n\n-- Busca herança completa (single query)\nSELECT ph.parentId, parent.nome, parent.active\nFROM perfil_heranca ph\nJOIN perfis parent ON ph.parentId = parent.id\nWHERE ph.childId IN (?, ?, ...)\n\n-- Busca permissões em batch\nSELECT acao, recurso, permitido\nFROM permissoes\nWHERE perfilId IN (?, ?, ...)\n```\n\n### Benchmarks\n\n| Operação                    | Tempo Típico | Observações             |\n| --------------------------- | ------------ | ----------------------- |\n| Usuario → Permissões        | ~50ms        | Com 3 níveis de herança |\n| Cache Hit                   | ~1ms         | Com TTL cache           |\n| Herança Complexa (5 níveis) | ~100ms       | Primeira execução       |\n\n## 🔧 Desenvolvimento\n\n```bash\n# Build\nnpm run build\n\n# Type checking\nnpm run typecheck\n\n# Testes\nnpm test\n```\n\n## 📚 Documentação Relacionada\n\n- 📖 [Consolidação de Features e Roadmap](../../docs/README.md)\n- 🔌 [Provider Contracts](../rbac-provider/)\n- 🚀 [Guia de Início Rápido](../../README.md)\n\n## 📄 Licença\n\nMIT © 2024 ANPD (Agência Nacional de Proteção de Dados)\n","readmeFilename":"README.md"}