{"_id":"@rbac/rbac","_rev":"17-691047b41134ef84a9b5ae2e942936e0","name":"@rbac/rbac","dist-tags":{"latest":"2.2.2"},"versions":{"1.0.0":{"name":"@rbac/rbac","version":"1.0.0","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@1.0.0","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"87a0686cf49967b28ddc2e094c2a729a7ada7810","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-1.0.0.tgz","fileCount":29,"integrity":"sha512-EAaihfSyrFp7r9kJiJ1xaBY2Tdw1jfr7mxlyuuBi9jT/IZPAobL2OlaYWFPPxkXu8HNPxjW4YhZnncKhKSxnFw==","signatures":[{"sig":"MEUCIQCGJeTpnRv8uhuh0hWX0VZp6NZpFHC4rkiIzPcJfTd4xQIgWdMoh2g4izLnpWSqlg5WmaXsB18KDjh6AQDRQASE20A=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":691764,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbb9fRCRA9TVsSAnZWagAA+UMP/Rq7EaKGxKqTwBWfb5h4\nBo6M8q7FBDE0C2sloB3rD2/g9MwWwDaJNB+iMkjUSIxyvGAu82bzdT4MVl+g\n5ny0QSsLph6QhZpb7grYHxIucCm165HYaUq3fKBLF93HVsxnZalUUkZnMBSN\nBr1BSs2+BzLPAYrEFygT9haBmGeW8+HHwu/nR7E219Isji8kEhEdwvVJ3BA8\nSYiGcz/w05IoPyjRRyFs5hSVA7gc/Vhg30S20SFUg5ucglbAv8Q81H9uUzSc\nAxW+4QYkHishGl6rR84NSqcsxpr6fmoxGtsq6WGp6JjgA93XnoAW3b9rLt7f\nEtQ/Zng+xDuxozWXanXIDVlsWQFcCmp8ichu7l7JbaMtUdO3+XMHJjoYbcT7\no/iGXshfr6Z+IB2u3QlAtiLvJ0hqB5rSRO35ZV+D9hAn78OuQfWv515dwTza\nAMPkNPRTtkJrmjfPxCUXrQIrxRYwCuBbnLWtPV4BQDgQyzCWkoxvbaAvpb5J\nzKw97ZBRhCg+LBecLu9BeTqOeT2oHgg8riGdqUA49hFY4OHAG6dfZdzOs8ZQ\nDsnlnj9W4QxSIW1hK4fCX8CVoTiTy/PNw4Yo55rLxU0ylyJkvMVQCubaqM/K\n1CpG03K8sY4U6ZrmehY3CoTgKvckNK8ylzCTzmHPiAaPiCXmNjUrBPjqHEbr\nMn/1\r\n=Kzt7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/@rbac/rbac.js","gitHead":"14fdcae98c11d5e7ce4b604e38777762d85528ce","scripts":{"dev":"webpack --progress --colors --watch --env dev","test":"NODE_ENV=test mocha --require @babel/register --colors ./test/*.spec.js","build":"webpack --env dev && webpack --env build && npm run test","record":"node -r @babel/register ./record/index.js","test:watch":"NODE_ENV=test mocha --require @babel/register --colors -w ./test/*.spec.js"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"5.6.0","description":"Blazzing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"_nodeVersion":"8.11.3","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jsdom":"11.11.0","mocha":"^4.0.1","yargs":"^10.0.3","eslint":"^5.0.1","webpack":"^4.12.2","@babel/cli":"^7.0.0-beta.51","@babel/core":"^7.0.0-beta.51","webpack-cli":"^3.0.8","babel-eslint":"^8.0.3","babel-loader":"^8.0.0-beta.4","jsdom-global":"3.0.2","eslint-loader":"^2.0.0","@babel/runtime":"^7.0.0-rc.1","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","uglifyjs-webpack-plugin":"^1.2.7","babel-plugin-transform-runtime":"^6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_1.0.0_1534056401497_0.8254569373052383","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@rbac/rbac","version":"1.0.1","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@1.0.1","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"2ca16d79147998291a3d5154cf97f2af02ed4893","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-1.0.1.tgz","fileCount":29,"integrity":"sha512-AonafANskvxsmZOiUyQ27FM8b3nxulMMu+URLLNUZgEofKtHZmch3lBbDamafKhO2rUvv4C7dz5W5AsavPPYmw==","signatures":[{"sig":"MEQCIB9sPIK53wKhFG29COfu3aOcQK6uFISZUmYY4G7tQ/YCAiBukNhwDrktuFe30edejAfU2WSfHOnlAXNHabOMaA4mNg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":669517,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbb9uECRA9TVsSAnZWagAAZTUP/iQXIzlVpGQNnmxQFYW/\nIGnqSGwIeSY3musq8nUi8s/NjWi2pRWquOQ8ABUU9H+2AoO3FDFzfhNb9vPE\njtirmFCAUO8320dhnpLEYwdmmbhYxncZx78VHujMnhhmLYk3FIdxaKwZ3ZX4\ntDS0dTc/71wdilCkANFnAOG4j3C0a96d+oQgyXWErN7a5JhKb4YGszpxhytV\nBLB4H35ihwu9uJXY0mncqZQWBsYJjNYGXpkCfq9jIKsem+VNgH8Lg6rnyDLu\ncA6rHTXBh5UGh8Sr0QYao06Uk0paWzccNfWrSidpc6+Z20sLdOF2eoWBkPxk\nkfAJGfj+0t/6wjLTpGKyEOogmYpyV6ao6YX7crimFMB3hVn+jGvhctEWs0XZ\n3vY2ZQ+GBQVN7G+Ac89cBk0xJ7WTg4ToxgE+SplrRQbjobigHXhF8BPNbeIc\nzYcSou6suIxhbE9oU8fz7Zv0QQD3Ncj+dMjA6tWTHWHHD8vw0kjneWmklvkm\ntoTN8AY2pChucllLR6FJToCSWzAzlZObG9AorOfSUhHSanBU7Bm28hRDlzfJ\nyZOxkbCcaHeov8Ft7CoXymUSd9YEnXQcVjraf1te6UY0/SGMbA8vjuk2pKd/\nIxWDdNBQXxLLbMlaZRB188i2FBL9WSRQaTn9dmZJNkqeD9p2rR6iPz2MJrht\nwkVx\r\n=24wP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/@rbac/rbac.js","gitHead":"606e1bc83a1c4b9498efe68b3cfca187054bdebe","scripts":{"dev":"webpack --progress --colors --watch --env dev","test":"NODE_ENV=test mocha --require @babel/register --colors ./test/*.spec.js","build":"webpack --env dev && webpack --env build && npm run test","record":"node -r @babel/register ./record/index.js","test:watch":"NODE_ENV=test mocha --require @babel/register --colors -w ./test/*.spec.js"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"5.6.0","description":"Blazzing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"_nodeVersion":"8.11.3","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jsdom":"11.11.0","mocha":"^4.0.1","yargs":"^10.0.3","eslint":"^5.0.1","webpack":"^4.12.2","@babel/cli":"^7.0.0-beta.51","@babel/core":"^7.0.0-beta.51","webpack-cli":"^3.0.8","babel-eslint":"^8.0.3","babel-loader":"^8.0.0-beta.4","jsdom-global":"3.0.2","eslint-loader":"^2.0.0","@babel/runtime":"^7.0.0-rc.1","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","uglifyjs-webpack-plugin":"^1.2.7","babel-plugin-transform-runtime":"^6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_1.0.1_1534057347951_0.5394539999090744","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@rbac/rbac","version":"1.0.2","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@1.0.2","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"176b3b3f40a494e60e462a4f078e8876410994b2","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-1.0.2.tgz","fileCount":29,"integrity":"sha512-KIm499M64Gkutj7ZmuZxrTTR6grccYUllzUNPsgJvTQ4MQhBwBkNC1SWDVivVFOlM1xT9Iq8beGvCm1G69lOHw==","signatures":[{"sig":"MEUCICUG4n9uTR4cpr+Jpgp+LHYBuRKjZhufx5JsGwRMo03CAiEAw9a/lAH3H/7XKU2gL5an/9H6107TlWr40lsDbxHVkH8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":670230,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbcWeuCRA9TVsSAnZWagAAp+cP+wb97nY3hqgN7URcPXwx\nwh+6ik/UMbU2RkTX7zeLlmfjk7SwwmqY5Ypr+2hQe8JBtSfl0wqIFzK5xPdC\n6zwgDEP697X06xjLyBkS+HeECfd+XcTSoqyNBV/eBSM7vTzVHHeUitSAtmIz\nu3NlZl/CWAJo7ecF79XKmkAoytFojIOngXCJ7EsnmZsmAAL85kgk/Ex/aPUN\n/ynA3JhsyEpby6ZcBRloRbnUDoSiyq0VHgG2lfXfPsJR1bbHnt8FTkv6DUK4\n5bRilZDyF7kcffQslPO9faFR8yHzFZ/GqdY08kg0qDkZmmVdqwhMWaHAdLMx\n3Q47/rnzL6fTMc+OUa9rs6SNnvbaPgNUxSuymeFJDChq/9+bdD92Q+WXUYoV\nUP6MtyBAudw5dsLfs5B9WQPKzhOmAXkxzPemFVH6JwoPKKL9bb5RtJaxfFgJ\nzkuEcEYp8R0oSAlvHz1OSqggILlJ458bD4SKGlaRBCdQ71s7RwMjG8OWv80D\n4XdlenGybk7OiC3sx5unfWFLIqnyZvse+V0a1qDaZvxpS+8oymF/AYcF4uaI\nXAvJCcLNssQyRJtTSBzUuGSqXwFY+90Gb99XmJiQouw9WdIHr9OOJMpRTdsV\n4kEN3D9BBo48vd56vbMfIl2krtwogLk3M7hzzhImkOjKHWk+/kVxejSdCAdX\nUYMK\r\n=T280\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/@rbac/rbac.js","gitHead":"c948501fa49d1e5d235da9a91603fc75ee5a631c","scripts":{"dev":"webpack --progress --colors --watch --env dev","test":"NODE_ENV=test mocha --require @babel/register --colors ./test/*.spec.js","build":"webpack --env dev && webpack --env build && npm run test","record":"node -r @babel/register ./record/index.js","test:watch":"NODE_ENV=test mocha --require @babel/register --colors -w ./test/*.spec.js"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"5.6.0","description":"Blazzing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"_nodeVersion":"8.11.3","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jsdom":"11.11.0","mocha":"^4.0.1","yargs":"^10.0.3","eslint":"^5.0.1","webpack":"^4.12.2","@babel/cli":"^7.0.0-beta.51","@babel/core":"^7.0.0-beta.51","webpack-cli":"^3.0.8","babel-eslint":"^8.0.3","babel-loader":"^8.0.0-beta.4","jsdom-global":"3.0.2","eslint-loader":"^2.0.0","@babel/runtime":"^7.0.0-rc.1","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","uglifyjs-webpack-plugin":"^1.2.7","babel-plugin-transform-runtime":"^6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_1.0.2_1534158765496_0.9355563903053281","host":"s3://npm-registry-packages"}},"1.0.3":{"name":"@rbac/rbac","version":"1.0.3","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@1.0.3","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"f4cf8eea3e48909da44087776bb0174651aef6dc","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-1.0.3.tgz","fileCount":28,"integrity":"sha512-oD3epAv3FuBm+jOfSqKeYVyn7HEliFY7i+8TerBHzWe1NZCtNr3JMOIC6eOVZd/N2K300OW3wimsRClF++WAGw==","signatures":[{"sig":"MEUCIEe8k2QjTS7m0RrU6U9dG4msz7MADiBCHiunjze/0LzpAiEAqQp3GDwRASVLiD+DI805LZOKgN7xNp7KcSRfo9Eg1r8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":678392,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhzF5CRA9TVsSAnZWagAA3kMP/2boZFSZOM8tLI4qRjMG\nvO4KIySt61oS33uESvw90MbeR5S/pX6d6Y33ayLkxaYTxhI3cECgkOQEE2HE\nQLlO5jsGMM8R+VGA2eqs/rIqLiz2ymL6vnulvKBsPuHJjacKoLTkPoys7hVy\nuUmDZLi8HliNpRq/nJMlQRQQp2nRnnfD70Pwc7GluSh9Yx7PoSQAWCxVPfb8\nznvM42c3r9ZO0+aqEmnxepNzXUpi+ABd8WyZkA8ZbklY6+mSJm5myHpxfONy\nHlSfY8R0/KtOnc8Rvwv7Y0BskDafGz6zwwr6PVope3uSCJk/O+3Ba5XnoYbZ\nxOduaXPk51Nj87bmeB1faGs1T0xRTzLLL/C3AxoWqvxqYKjsPu8GpqVAEgQc\nnO7LyoH2IM2Taj0+jktKyaElhyQ/HaXzE4plgNIWLK/eI934WKk/Y/dDNkaF\nSwmgTygFFCY9J+CyjkgTHeVHvt+oq/YoiYXMTaqI0/l92QpfKdv9qvzFqMzH\n+kxkjIsZ3ZNzN6/KlBfOsYziITIVzL/QPlo4P4dBofEhKZLJOZg5NV2Qq6Od\nJYbkHubGXwnilJYoduT6zXdhKdwTtza0ctxsi5RnwsXHaj/qV4Vs6df0z6OL\nQB33mag5fnDUJNB6Ps2w81ntmN9dup6V5UMmCLmyO7KKiTWayNc+P/uNZ2oy\netS3\r\n=pvxb\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/@rbac/rbac.js","gitHead":"abcf2c6e30ceff308e3b75ca3827a5dbd916a79a","scripts":{"dev":"webpack --progress --colors --watch --env dev","test":"NODE_ENV=test mocha --require @babel/register --colors ./test/*.spec.js","build":"webpack --env dev && webpack --env build && npm run test","record":"node -r @babel/register ./record/index.js","test:watch":"NODE_ENV=test mocha --require @babel/register --colors -w ./test/*.spec.js"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"6.2.0","description":"Blazzing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"_nodeVersion":"10.9.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jsdom":"11.11.0","mocha":"^4.0.1","yargs":"^10.0.3","eslint":"^5.0.1","webpack":"^4.12.2","@babel/cli":"^7.0.0-beta.51","@babel/core":"^7.0.0-beta.51","webpack-cli":"^3.0.8","babel-eslint":"^8.0.3","babel-loader":"^8.0.0-beta.4","jsdom-global":"3.0.2","eslint-loader":"^2.0.0","@babel/runtime":"^7.0.0-rc.1","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","uglifyjs-webpack-plugin":"^1.2.7","babel-plugin-transform-runtime":"^6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_1.0.3_1535586680600_0.7936443955669308","host":"s3://npm-registry-packages"}},"1.0.4":{"name":"@rbac/rbac","version":"1.0.4","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@1.0.4","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"872cbd309ceb8f5f30fa46fa6830b34b8a181ac1","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-1.0.4.tgz","fileCount":28,"integrity":"sha512-rL5niSJCxlxuNhfurUKKxnphWrBETbfqNYF/NW7gz1fpqF1ALVUYjPAbaR8utTKEHYQllGtHU5YJuqgKithjxw==","signatures":[{"sig":"MEQCIGF0UpvTJKdOOxq+ObC7cz1xsE3xHqcDXmGemCLfxruVAiBQEsMDN4TEPkMann3mHJcUp5fd25uLXyVmukHLzckMMQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":678307,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhzS9CRA9TVsSAnZWagAAbhsP/Ap1KNd7CvlelVcEBEx1\nMUeT4Xc1zcrDVuEjOu30I7uIXlqZ55hvTC4/+B4hz9ZSMJOYqTCt//z+NJDz\nW8iyFwk0HqELdBjJEB6EgwICxhPI8UO+YGPnE83Zaxg5LWjZL4Cc24Rfc/07\n5sp/EB3D6oyMTSTvjopl2bj24MhEnZrq7lJAgKveYinb9mgtQBUsZhsUNG9v\nWavRCT0Mx0+6gwdhCTPuSw3AsoD0thCoRBBZj7qpMI4I2u/JcaiZC5v7NnkS\niQB31FEeafQNutJWvGxk4lFrzt/UYSWhuuwJeQBcRzlugrhKKFgo0p1j3nb8\nSBU6BI8jdT4A/h+rmOoOUkci0r7B3f3CprqPQmr/CQ2Rh4h42S1c6bNtY+zL\nOf1xgjN7R6gcBhVxmlKu3lTUc2InDIeoc8GHxG8zg4Esbj4j9UEcjCrHreT9\n01SXBNOYYdgvZKHee+e/1/Eoiq2tfPNYL4Q+sp8/J02/IdxWLnUTvlt6QDB9\npO2M9s2RY2iMBEyMw8zW1T+pcBffDOtv9UngQ5J2WwlQvDu/jlKbwfVkce0O\nUxH/d81+wp6dbCzEGYrFIcPaLPUaK6HtaircnHXQSnUc6uRLTsmS9fcNffF+\n0S7pP70nUSPqZ71eRv7aeuOQ192MJnWSh7+3NmtjxHfO6jd2FDcDpSPvRx6S\nJdqD\r\n=dUVS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/@rbac/rbac.min.js","gitHead":"0e075e16a8cad69b157d0424a77f9e32eb355f88","scripts":{"dev":"webpack --progress --colors --watch --env dev","test":"NODE_ENV=test mocha --require @babel/register --colors ./test/*.spec.js","build":"webpack --env dev && webpack --env build && npm run test","record":"node -r @babel/register ./record/index.js","test:watch":"NODE_ENV=test mocha --require @babel/register --colors -w ./test/*.spec.js"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"6.2.0","description":"Blazzing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"_nodeVersion":"10.9.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jsdom":"11.11.0","mocha":"^4.0.1","yargs":"^10.0.3","eslint":"^5.0.1","webpack":"^4.12.2","@babel/cli":"^7.0.0-beta.51","@babel/core":"^7.0.0-beta.51","webpack-cli":"^3.0.8","babel-eslint":"^8.0.3","babel-loader":"^8.0.0-beta.4","jsdom-global":"3.0.2","eslint-loader":"^2.0.0","@babel/runtime":"^7.0.0-rc.1","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","uglifyjs-webpack-plugin":"^1.2.7","babel-plugin-transform-runtime":"^6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_1.0.4_1535587516619_0.4530121732858594","host":"s3://npm-registry-packages"}},"1.0.5":{"name":"@rbac/rbac","version":"1.0.5","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@1.0.5","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"81207f5b0e45153f0796bab7d344274e3b951c95","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-1.0.5.tgz","fileCount":9,"integrity":"sha512-ROWqEzI2uRjUkPsH6uF2zTLPb0LikFKBHXu1H8DHCl8q62SYht0VBi0B8XPwijyesWMgaC9TyVFBhtP3X5HzuQ==","signatures":[{"sig":"MEUCIAJ5JYUXZiIuqA+ueZCJzrLtdGWZ7anMfFFL47mGnjkfAiEAubB59rhvCo8NHqPUllxD7ArWACNHaghJHrT61qzGu9g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":243171,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbhzYiCRA9TVsSAnZWagAAwrQP/3v5FFKclfOwjtRF6s3V\nOizbXSWDee6DHDpkGnpq0igaW42FKhiOefGatlNcLHQtrgZGzbHeymrWU1XB\nVuY59K5qqwrc4Rg+Yl0VgnNgudyw0YIVjod4aJ5SUu2Z5/QZeTZSt6WtHRFl\nh5YsDrstUgyBNrXIzoWi+kaLbgzgaArExcx0rxHegh+Vrxg2CdtgDVZ8ZwTF\n033jK3HxvvJswnia4roJKJ2nHWpQp4GzxAp/cjrABMCICQoIVHXlyM6Rt6Ho\nqERWjY+D0Nvv2UD9HmQHsrJq4xvPZcuHhzoGJCCzIRVLdj15HnqkYCG2YtTK\nFVMcDYMFN4x10W9BFbqpl0g0O9gooGvzzx+Cm8tTOcmo6Vkun3UdgKvds7hC\nHEvZ+hGpRhj67NOJqZ0oaVM+AQnT8IM1XrvaM/ofRBVq6ezgqrUcWjNbPa+4\nR+42TX5XK2jGSFIkMxU6tdy43yE6bVoYFj3ePURlQ6EU4lDzwtXUDXpGC/iN\n+BbxR2rrXyxkaNcjE/w5lp1Uj0/NTfDov54vNzEkLmo9T86kjt4Us68hdSnY\n+Tz9+3rdiTf/wvCXz34jSXrG0Mzh/ERTdqjw0VX5AECKW+1drohVEMOfsf95\nAqfGd2RnxXexOPNInmuCbZ0E/jS5madx0Lg9xAAocvOA1OnC+7Fp9sZZAW6r\nI/lx\r\n=fqOQ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/@rbac/rbac.min.js","gitHead":"1a685c7e6bcd7e18c2bde48b218c3532c6eabbf1","scripts":{"dev":"webpack --progress --colors --watch --env dev","test":"NODE_ENV=test mocha --require @babel/register --colors ./test/*.spec.js","build":"webpack --env dev && webpack --env build && npm run test","record":"node -r @babel/register ./record/index.js","test:watch":"NODE_ENV=test mocha --require @babel/register --colors -w ./test/*.spec.js"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"6.2.0","description":"Blazzing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"_nodeVersion":"10.9.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jsdom":"11.11.0","mocha":"^4.0.1","yargs":"^10.0.3","eslint":"^5.0.1","webpack":"^4.12.2","@babel/cli":"^7.0.0-beta.51","@babel/core":"^7.0.0-beta.51","webpack-cli":"^3.0.8","babel-eslint":"^8.0.3","babel-loader":"^8.0.0-beta.4","jsdom-global":"3.0.2","eslint-loader":"^2.0.0","@babel/runtime":"^7.0.0-rc.1","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","uglifyjs-webpack-plugin":"^1.2.7","babel-plugin-transform-runtime":"^6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_1.0.5_1535587873820_0.5057774202668803","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@rbac/rbac","version":"1.1.0","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@1.1.0","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"58f29f4d4024e3e4408c63abdbd37291669d69dd","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-1.1.0.tgz","fileCount":9,"integrity":"sha512-c7FJyy9eSd1qTcszLbzZpHo312M+z+kcexLNm9DIqHX7qmPF2HEIIzyc29tU2VatKxOWqPV9Hsajus1bMsC+8w==","signatures":[{"sig":"MEUCIQDQkHCTKLKrGY+EvRmL0AhIuu+NelxJksbBufPv2gXH1QIgS0jsfhZUB1RDk36r6lGUs1rDB7L1MP5Iwy3Ktp8P8kQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":246568,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJbjUE7CRA9TVsSAnZWagAAP+IP/1ArE+UOIAY/Yt1IuMae\nkh5ciydCC1b4U7GTELslh5P8xO4lmB5EOBS0I1ibD3jEgUZdcqLyhzAKWpZH\n50A9203FnyK8hEzyR9Tb9YbJQauXnMssjkm53rsT9FO5oFd5YaVQ/uuQ6+Pq\nTi1qP7ZOWma1IJ6BQ2QeMwhLY0zfNDrfmru+su8qiIRHs3x3pKVw2CfL91ts\nmqAXXJAnt2O1Lf06gWSvqN2FtmsArPBlUZnw3zQJ7AsjN3Bg5K3+6mwGvZqr\nwmNBEwr/4fwN0JAjxJUtAabe/v24zaZSosNM93i+hE26wairTcjs8Ge3cGpx\nzMhEmtFZC6baiZqAhNUdPtsmzFTYGaUY0PzVtEXttS8XkyG8nZeLA1TVP17Q\nCxZXGVDLbs1j6GuKv+1lpCpH6iAeuW8lMMBwjFYokJvvL18kmYV8IRoKr+58\nlZbqFB+N0v44m/7o56hgbny/6PGtc6ONPZBoTs4K5Re67fzcbRI7Ervc+4qa\ncqv4tfsqIbuatqTGQQPvyxc/QGaodQwiuKLXBWqN/jYgUuJJk7MWFC8aPR8T\nXLo4tI/fIgCLzavlbLTkxqHU23EwgiqhvbbkzRgP0/zVmAtF951f9FQwxYgI\nrf0pU4R8hIpL6jJ74OBdsVxIS2odgbTdJQXftCwIWTN2bnO6ey5GX2h1NB7m\nCil1\r\n=mt3r\r\n-----END PGP SIGNATURE-----\r\n"},"main":"lib/@rbac/rbac.min.js","gitHead":"850c569f1f4c6bfad4fc503646449fb0bf827fcd","scripts":{"dev":"webpack --progress --colors --watch --env dev","test":"NODE_ENV=test mocha --require @babel/register --colors ./test/*.spec.js","build":"webpack --env dev && webpack --env build && npm run test","record":"node -r @babel/register ./record/index.js","test:watch":"NODE_ENV=test mocha --require @babel/register --colors -w ./test/*.spec.js"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"6.2.0","description":"Blazzing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"_nodeVersion":"10.9.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jsdom":"11.11.0","mocha":"^4.0.1","yargs":"^10.0.3","eslint":"^5.0.1","webpack":"^4.12.2","@babel/cli":"^7.0.0-beta.51","@babel/core":"^7.0.0-beta.51","webpack-cli":"^3.0.8","babel-eslint":"^8.0.3","babel-loader":"^8.0.0-beta.4","jsdom-global":"3.0.2","eslint-loader":"^2.0.0","@babel/runtime":"^7.0.0-rc.1","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","uglifyjs-webpack-plugin":"^1.2.7","babel-plugin-transform-runtime":"^6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_1.1.0_1535983930497_0.565105175343334","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@rbac/rbac","version":"2.0.0","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@2.0.0","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"a0df9a4c72383a18acc0344840710631af31707b","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-2.0.0.tgz","fileCount":38,"integrity":"sha512-kiN8/bSMJGLo3lqXAziHxal4YWlU16jizzt+LOiGR2pEXzuNkDEGS1JB+uY4xJuueaz2mPCZy3nEDBxL34/OeQ==","signatures":[{"sig":"MEUCIQCAcrBoBFE2RA1YaLuAX6ShpjCPWBXOm5jdQAxhVB0SngIgFLqPME4TxxgWLZu5RncmwLdOEvp2DulK68CKenRxlu8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43803},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"0d5b54dd2e3d85bfa3e451fd3e93251ce2944ab8","scripts":{"dev":"tsc -w","test":"NODE_ENV=test mocha --require @babel/register --colors ./test/*.spec.js","build":"tsc && vite build && npm run test","examples":"node -r ts-node/register ./examples/index.ts","test:npm":"cd test/npm-test && npm install && npm test","test:watch":"NODE_ENV=test mocha --require @babel/register --colors -w ./test/*.spec.js"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"10.9.2","description":"Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"_nodeVersion":"22.16.0","_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","vite":"^6.3.5","jsdom":"11.11.0","mocha":"^4.0.1","eslint":"^5.0.1","@babel/cli":"^7.0.0-beta.51","typescript":"^5.8.3","@babel/core":"^7.0.0-beta.51","@types/node":"^22.15.30","babel-eslint":"^8.0.3","jsdom-global":"3.0.2","@babel/runtime":"^7.0.0-rc.1","@types/express":"^5.0.3","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","babel-plugin-transform-runtime":"6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_2.0.0_1749373905080_0.2074922886395263","host":"s3://npm-registry-packages-npm-production"}},"2.1.0":{"name":"@rbac/rbac","version":"2.1.0","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@2.1.0","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"898681b434c3d07ff81ed6693c1aade7e4aa2c53","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-2.1.0.tgz","fileCount":40,"integrity":"sha512-8S0lf1BN6rTfz4NRoKuccHeQkfFoLv0dpTgrW04hs1A0pKdUfo0K3mkdbTRg5m3gE0RnK7Ct9gLy8bO29ncJmQ==","signatures":[{"sig":"MEUCIQDnnHVO9K+5NFJAXFJyM/M8ZwgRG923qB2zk2hdSR3KAQIgQonLqSpLsEbSwNneNCcStmokdF/1PVIAa47BePQmkzo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49934},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"c0ad06ead7eaf2b4bbace8fab341d6ad74c8e430","scripts":{"dev":"tsc -w","test":"NODE_ENV=test mocha --require @babel/register --colors ./test/*.spec.js","build":"tsc && vite build","examples":"node -r ts-node/register ./examples/index.ts","test:npm":"cd test/npm-test && npm install && npm test","test:watch":"NODE_ENV=test mocha --require @babel/register --colors -w ./test/*.spec.js"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"10.9.2","description":"Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"_nodeVersion":"22.16.0","dependencies":{"zod":"^3.25.56"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","vite":"^6.3.5","jsdom":"11.11.0","mocha":"^4.0.1","eslint":"^5.0.1","@babel/cli":"^7.0.0-beta.51","typescript":"^5.8.3","@babel/core":"^7.0.0-beta.51","@types/node":"^22.15.30","babel-eslint":"^8.0.3","jsdom-global":"3.0.2","@babel/runtime":"^7.0.0-rc.1","@types/express":"^5.0.3","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","babel-plugin-transform-runtime":"6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_2.1.0_1749400576220_0.6023441554120763","host":"s3://npm-registry-packages-npm-production"}},"2.1.1":{"name":"@rbac/rbac","version":"2.1.1","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@2.1.1","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"1e6b1092ef3489681baade4f18fcfd702e2ff78b","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-2.1.1.tgz","fileCount":98,"integrity":"sha512-nUnq2TERUxJsuWXG25Gf+GgFM16yU4iRbCEr6DrXmqRSjqaxPkM1eQMhNB4aBb7fEJZ4SvwqdJm9A+4eoz53UA==","signatures":[{"sig":"MEUCIGj6snzJpmzRoxVmjAtL22cZSSVG7NfjO7P8JNaGQUsCAiEA/uTAA4P9eqs3DId9eyjad6DbRp7Z3OCGpEu6OQPOYtg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":484136},"main":"lib/index.js","types":"lib/index.d.ts","gitHead":"52087b5bda583d92a571fab341c315ca65c12e11","scripts":{"dev":"tsc -w","test":"NODE_ENV=test jest --coverage","bench":"node ./benchmarks/perf.js","build":"tsc && vite build","examples":"node -r ts-node/register ./examples/index.ts","test:npm":"cd test/npm-test && npm install && npm test","test:watch":"NODE_ENV=test jest --watch"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"overrides":{"undici-types":"^7.10.0"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"10.9.3","description":"Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"resolutions":{"undici-types":"^7.10.0"},"_nodeVersion":"22.19.0","dependencies":{"zod":"^3.25.76"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jest":"^30.1.3","rbac":"^5.0.3","vite":"^6.3.5","benny":"^3.7.1","jsdom":"^27.0.0","mocha":"^11.7.2","eslint":"^9.35.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","easy-rbac":"^4.0.0","fast-rbac":"^2.0.1","@babel/cli":"^7.0.0-beta.51","asciichart":"^1.5.25","typescript":"^5.8.3","@babel/core":"^7.0.0-beta.51","@types/jest":"^30.0.0","@types/node":"^22.15.30","babel-eslint":"^8.0.3","jsdom-global":"3.0.2","accesscontrol":"^2.2.1","@babel/runtime":"^7.0.0-rc.1","@types/express":"^5.0.3","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","babel-plugin-transform-runtime":"6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_2.1.1_1758996164656_0.60743780804806","host":"s3://npm-registry-packages-npm-production"}},"2.1.2":{"name":"@rbac/rbac","version":"2.1.2","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@2.1.2","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"204be1da56c6a35864b230b7a306e1679f2b9aea","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-2.1.2.tgz","fileCount":83,"integrity":"sha512-+hBhVybNAoO/MRJMedkTMC3yGWjuJHgneinb93CWZeRIohg8XYj3s504GRF/9fdYd9VOvNY7Ax6R9mLQ1qtm0Q==","signatures":[{"sig":"MEQCIATUJ+jLKS9ope8axotLaDHg1k230YexD+kdqKTvG6AxAiBSjJ9G/BYoaDXAU4aIcHN+RXzUi5KO+nrmo9iDb1oozw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":408823},"main":"lib/index.js","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.mjs","default":"./lib/index.js","require":"./lib/index.cjs"}},"gitHead":"d83b3c766a4c8a1ee4c686039c3598cfef66d729","scripts":{"dev":"tsc -w","test":"NODE_ENV=test jest --coverage","bench":"node ./benchmarks/perf.js","build":"tsc && vite build","examples":"node -r ts-node/register ./examples/index.ts","test:npm":"cd test/npm-test && npm install && npm test","test:watch":"NODE_ENV=test jest --watch"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"overrides":{"undici-types":"^7.10.0"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"10.9.2","description":"Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"resolutions":{"undici-types":"^7.10.0"},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.25.76"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jest":"^30.1.3","rbac":"^5.0.3","vite":"^6.3.5","benny":"^3.7.1","jsdom":"^27.0.0","mocha":"^11.7.2","eslint":"^9.35.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","easy-rbac":"^4.0.0","fast-rbac":"^2.0.1","@babel/cli":"^7.0.0-beta.51","asciichart":"^1.5.25","typescript":"^5.8.3","@babel/core":"^7.0.0-beta.51","@types/jest":"^30.0.0","@types/node":"^22.15.30","babel-eslint":"^8.0.3","jsdom-global":"3.0.2","accesscontrol":"^2.2.1","@babel/runtime":"^7.0.0-rc.1","@types/express":"^5.0.3","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","babel-plugin-transform-runtime":"6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_2.1.2_1769784521171_0.7668587786646825","host":"s3://npm-registry-packages-npm-production"}},"2.1.3":{"name":"@rbac/rbac","version":"2.1.3","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@2.1.3","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"087cc7f8aad03e8c921bd40043a8ec8aeefad01f","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-2.1.3.tgz","fileCount":801,"integrity":"sha512-6rmSW2xmxFi0LUcT7yCSHDaIB1K4hSc8uiGQjqcFz0LsC7X2qOgebXgyjSdOtGptqVdiMdBtSoTZp9iW/lTgPw==","signatures":[{"sig":"MEYCIQDQsUhax1jYqc2xyY5pO1Uq/fySn5uFAYMPe/DdHEEcdAIhAOKe3msFRu2/zl9dzj2mhcghSugdJUepmYJsyc/e2rfJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":28853338},"main":"lib/index.js","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.mjs","default":"./lib/index.js","require":"./lib/index.cjs"}},"gitHead":"9257196fca699c118b3339c64fccb246f179a577","scripts":{"dev":"tsc -w","test":"NODE_ENV=test jest --coverage","bench":"node ./benchmarks/perf.js","build":"tsc && vite build","examples":"node -r ts-node/register ./examples/index.ts","test:npm":"cd test/npm-test && npm install && npm test","test:watch":"NODE_ENV=test jest --watch"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"overrides":{"undici-types":"^7.10.0"},"deprecated":"Security issue fixed in 2.2.0: conditional 'when' authorization guards could be bypassed when can(role, operation, params) was called with glob or RegExp operation queries. Upgrade to @rbac/rbac@2.2.0.","repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"10.9.2","description":"Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"resolutions":{"undici-types":"^7.10.0"},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.25.76"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jest":"^30.1.3","rbac":"^5.0.3","vite":"^6.3.5","benny":"^3.7.1","jsdom":"^27.0.0","mocha":"^11.7.2","eslint":"^9.35.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","easy-rbac":"^4.0.0","fast-rbac":"^2.0.1","@babel/cli":"^7.0.0-beta.51","asciichart":"^1.5.25","typescript":"^5.8.3","@babel/core":"^7.0.0-beta.51","@types/jest":"^30.0.0","@types/node":"^22.15.30","babel-eslint":"^8.0.3","jsdom-global":"3.0.2","accesscontrol":"^2.2.1","@babel/runtime":"^7.0.0-rc.1","@types/express":"^5.0.3","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","babel-plugin-transform-runtime":"6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_2.1.3_1769787049427_0.4418488038318902","host":"s3://npm-registry-packages-npm-production"}},"2.2.0":{"name":"@rbac/rbac","version":"2.2.0","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@2.2.0","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"918c89e4eb29190ca04a98674ee0943d86efc709","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-2.2.0.tgz","fileCount":87,"integrity":"sha512-z6uylvplNtoNY6FxuPN8A7ZC5NJvJXLn75DIurBNuskPE+xp0jNMjeMN325X5IO0wrG8Srha92/Mlr5qDLsrzw==","signatures":[{"sig":"MEYCIQCRf1rPiKSVaabp2EowVB0ZSOC9G89ywQuw2wp3qprxdwIhAPeN6XTZ5tL4KFcvSSM6FbO8FNuiyr/iaskO6mKDYY5X","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":470308},"main":"lib/index.js","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.mjs","default":"./lib/index.js","require":"./lib/index.cjs"}},"gitHead":"40e77a49241028109cc0d7fd3523544bb46f0951","scripts":{"dev":"tsc -w","test":"cross-env NODE_ENV=test jest --coverage","bench":"node ./benchmarks/perf.js","build":"tsc && vite build","examples":"node -r ts-node/register ./examples/index.ts","test:npm":"cd test/npm-test && npm install && npm test","test:watch":"cross-env NODE_ENV=test jest --watch"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"overrides":{"undici-types":"^7.10.0"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"10.9.2","description":"Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"resolutions":{"undici-types":"^7.10.0"},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.25.76"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jest":"^30.1.3","rbac":"^5.0.3","vite":"^6.3.5","benny":"^3.7.1","jsdom":"^27.0.0","mocha":"^11.7.2","eslint":"^9.35.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","cross-env":"^10.1.0","easy-rbac":"^4.0.0","fast-rbac":"^2.0.1","@babel/cli":"^7.0.0-beta.51","asciichart":"^1.5.25","typescript":"^5.8.3","@babel/core":"^7.0.0-beta.51","@types/jest":"^30.0.0","@types/node":"^22.15.30","babel-eslint":"^8.0.3","jsdom-global":"3.0.2","accesscontrol":"^2.2.1","@babel/runtime":"^7.0.0-rc.1","@types/express":"^5.0.3","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","babel-plugin-transform-runtime":"6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_2.2.0_1787934731597_0.8568311138407616","host":"s3://npm-registry-packages-npm-production"}},"2.2.1":{"name":"@rbac/rbac","version":"2.2.1","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","_id":"@rbac/rbac@2.2.1","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"homepage":"https://github.com/phellipeandrade/rbac","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"dist":{"shasum":"c9a29eea7831b6e5cf316dc03b8d95111f544d3f","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-2.2.1.tgz","fileCount":87,"integrity":"sha512-d9avEaWZbscJxsJ5Ch3cP96CcGCuhB6Ayyt4HuN/KFrNR9RmTSjpt0WmRVlMMhk8IWremO1xFI1Nb0FgoDta3Q==","signatures":[{"sig":"MEYCIQCJ1uLM+uzzXZMD3F51/oUlICR6/d/z5+/as/GOUuD0tQIhAOX2u556h6go8VN92DdTJT6gymjQ9SVTnt8CXeGaeIU6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":470330},"main":"lib/index.js","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","default":"./lib/index.js","require":"./lib/index.js"}},"gitHead":"4aa279ce29e81096dc1f9a9b8f1ea2039049c03f","scripts":{"dev":"tsc -w","test":"cross-env NODE_ENV=test jest --coverage","bench":"node ./benchmarks/perf.js","build":"tsc && vite build","examples":"node -r ts-node/register ./examples/index.ts","test:npm":"cd test/npm-test && npm install && npm test","test:watch":"cross-env NODE_ENV=test jest --watch"},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"overrides":{"undici-types":"^7.10.0"},"repository":{"url":"git+https://github.com/phellipeandrade/rbac.git","type":"git"},"_npmVersion":"10.9.2","description":"Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","directories":{},"resolutions":{"undici-types":"^7.10.0"},"_nodeVersion":"22.14.0","dependencies":{"zod":"^3.25.76"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.1.2","jest":"^30.1.3","rbac":"^5.0.3","vite":"^6.3.5","benny":"^3.7.1","jsdom":"^27.0.0","mocha":"^11.7.2","eslint":"^9.35.0","ts-jest":"^29.4.4","ts-node":"^10.9.2","cross-env":"^10.1.0","easy-rbac":"^4.0.0","fast-rbac":"^2.0.1","@babel/cli":"^7.0.0-beta.51","asciichart":"^1.5.25","typescript":"^5.8.3","@babel/core":"^7.0.0-beta.51","@types/jest":"^30.0.0","@types/node":"^22.15.30","babel-eslint":"^8.0.3","jsdom-global":"3.0.2","accesscontrol":"^2.2.1","@babel/runtime":"^7.0.0-rc.1","@types/express":"^5.0.3","@babel/register":"^7.0.0-beta.51","@babel/preset-env":"^7.0.0-beta.51","babel-plugin-transform-runtime":"6.23.0","@babel/plugin-transform-runtime":"^7.0.0-rc.1","babel-plugin-add-module-exports":"^0.2.1"},"_npmOperationalInternal":{"tmp":"tmp/rbac_2.2.1_1787936328721_0.8356109256855899","host":"s3://npm-registry-packages-npm-production"}},"2.2.2":{"name":"@rbac/rbac","version":"2.2.2","description":"Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","main":"lib/index.js","types":"lib/index.d.ts","exports":{".":{"types":"./lib/index.d.ts","import":"./lib/index.js","require":"./lib/index.js","default":"./lib/index.js"}},"scripts":{"build":"tsc && vite build","dev":"tsc -w","examples":"node -r ts-node/register ./examples/index.ts","test":"cross-env NODE_ENV=test jest --coverage","test:watch":"cross-env NODE_ENV=test jest --watch","test:npm":"cd test/npm-test && npm install && npm test","bench":"node ./benchmarks/perf.js"},"repository":{"type":"git","url":"git+https://github.com/phellipeandrade/rbac.git"},"keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"author":{"name":"Phellipe Andrade"},"license":"MIT","bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"homepage":"https://github.com/phellipeandrade/rbac","devDependencies":{"@babel/cli":"^7.0.0-beta.51","@babel/core":"^7.0.0-beta.51","@babel/plugin-transform-runtime":"^7.0.0-rc.1","@babel/preset-env":"^7.0.0-beta.51","@babel/register":"^7.0.0-beta.51","@babel/runtime":"^7.0.0-rc.1","@types/express":"^5.0.3","@types/jest":"^30.0.0","@types/node":"^22.15.30","accesscontrol":"^2.2.1","asciichart":"^1.5.25","babel-eslint":"^8.0.3","babel-plugin-add-module-exports":"^0.2.1","babel-plugin-transform-runtime":"6.23.0","benny":"^3.7.1","chai":"^4.1.2","cross-env":"^10.1.0","easy-rbac":"^4.0.0","eslint":"^9.35.0","fast-rbac":"^2.0.1","jest":"^30.1.3","jsdom":"^27.0.0","jsdom-global":"3.0.2","mocha":"^11.7.2","rbac":"^5.0.3","ts-jest":"^29.4.4","ts-node":"^10.9.2","typescript":"^5.8.3","vite":"^6.3.5"},"dependencies":{"zod":"^3.25.76"},"overrides":{"undici-types":"^7.10.0"},"resolutions":{"undici-types":"^7.10.0"},"_id":"@rbac/rbac@2.2.2","gitHead":"edd3275ee3b4fe99c2d6ae251dcc5ff9fed21a7c","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-5UTrWdDCqH3RtrrVuPYAeNZ5TwHH6bSVriPY5sWQiqckBbpk7pzNpprrnv7IzMSxZhN4Uty2pqPz1XnByMARgA==","shasum":"16db3054c828e0f5acdfbe0e0c5866c8113db6fb","tarball":"https://registry.npmjs.org/@rbac/rbac/-/rbac-2.2.2.tgz","fileCount":87,"unpackedSize":482820,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCzJ8TOj8U7K3uKw4KHFlp0iqjCc5z72gW8xI/gdaHGVwIhAJ1MYm3HJyF6Mot5IW8hKIPGqFLPhs0Puw98DtU0c/Mx"}]},"_npmUser":{"name":"phandrade","email":"phellipe.dev@gmail.com"},"directories":{},"maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/rbac_2.2.2_1787938868536_0.6330763552245497"},"_hasShrinkwrap":false}},"time":{"created":"2018-08-12T06:46:41.454Z","modified":"2026-08-28T17:41:08.929Z","1.0.0":"2018-08-12T06:46:41.561Z","1.0.1":"2018-08-12T07:02:28.144Z","1.0.2":"2018-08-13T11:12:45.620Z","1.0.3":"2018-08-29T23:51:20.815Z","1.0.4":"2018-08-30T00:05:16.780Z","1.0.5":"2018-08-30T00:11:14.070Z","1.1.0":"2018-09-03T14:12:10.617Z","2.0.0":"2025-06-08T09:11:45.275Z","2.1.0":"2025-06-08T16:36:16.404Z","2.1.1":"2025-09-27T18:02:44.854Z","2.1.2":"2026-01-30T14:48:41.329Z","2.1.3":"2026-01-30T15:30:49.752Z","2.2.0":"2026-08-28T16:32:11.770Z","2.2.1":"2026-08-28T16:58:48.913Z","2.2.2":"2026-08-28T17:41:08.695Z"},"bugs":{"url":"https://github.com/phellipeandrade/rbac/issues"},"author":{"name":"Phellipe Andrade"},"license":"MIT","homepage":"https://github.com/phellipeandrade/rbac","keywords":["rbac","authorization","hierarchical","privacy","role","security","permission","acl"],"repository":{"type":"git","url":"git+https://github.com/phellipeandrade/rbac.git"},"description":"Blazing Fast, Zero dependency, Hierarchical Role-Based Access Control for Node.js","maintainers":[{"name":"phandrade","email":"phellipe.dev@gmail.com"}],"readme":"\n<p align=\"center\">\n  <img alt=\"RBAC\" width=\"556px\" src=\"img/logo.png\" />\n</p>\n\n<h1 align=\"center\">\n  Hierarchical Role-Based Access Control for Node.js\n</h1>\n\n[![CircleCI](https://circleci.com/gh/phellipeandrade/rbac/tree/master.svg?style=svg)](https://circleci.com/gh/phellipeandrade/rbac/tree/master)\n[![npm version](https://badge.fury.io/js/@rbac%2Frbac.svg?icon=si%3Anpm)](https://badge.fury.io/js/@rbac%2Frbac)\n[![Tweet](https://img.shields.io/twitter/url/http/shields.io.svg?style=social)](https://twitter.com/intent/tweet?text=checkout%20RBAC%20project%20on%20Github!&url=https://github.com/phellipeandrade/rbac&hashtags=rbac,authorization,privacy,security,permission)\n\n\n* ⏱ Lightweight\n* ⚡️Fastest RBAC (check benchmarks)\n* ️🍃low dependency\n\n## Features\n\n* Focused on operations\n* Scalable\n* Each role is given specific access rights for every operation\n* High granularity in assigning rights\n* Wildcard and regex support for operations\n* Optional database adapters (MongoDB, MySQL, PostgreSQL)\n* Express, NestJS and Fastify middlewares\n* Roles can be updated at runtime\n\n## Thanks\n\n  This project now uses **Vite** to generate the bundled output\n\n  Thanks to Karl Düüna ([DeadAlready](https://github.com/DeadAlready)) and his awesome [post on medium](https://blog.nodeswat.com/implement-access-control-in-node-js-8567e7b484d1)\n  \n  \n## Getting Started\n\n#### Install\n\n`yarn add @rbac/rbac` or `npm install @rbac/rbac`\n\nThis library is written in TypeScript and the published package ships with\nits declaration files for a great developer experience.\n\n#### Import\n\nThe package supports both ES modules and CommonJS.\n\n**ES Modules (recommended)**\n\n```ts\n// Default import\nimport RBAC from '@rbac/rbac';\n\n// Named imports\nimport { createTenantRBAC, MongoRoleAdapter } from '@rbac/rbac';\n\n// Combined\nimport RBAC, { createTenantRBAC } from '@rbac/rbac';\n```\n\n**CommonJS**\n\n```js\n// Default import\nconst RBAC = require('@rbac/rbac');\n\n// Named imports\nconst { createTenantRBAC, MongoRoleAdapter } = require('@rbac/rbac');\n\n// Combined\nconst RBAC = require('@rbac/rbac');\nconst { createTenantRBAC } = require('@rbac/rbac');\n```\n\n#### Usage\n\nRBAC is a curried function thats initially takes an object with configurations, \nthen returns another function that takes an object with roles, \nfinally returns an object that holds \"can\" property that is a function.\n\nYou can use it in many ways, below is one of them:\n\n#### Setup RBAC config\n![step 01](./img/01.png)\n\n| Property     \t| Type          \t| Params                                                      \t| Default       \t| Description                             \t|\n|--------------\t|---------------\t|-------------------------------------------------------------\t|---------------\t|-----------------------------------------\t|\n| logger       \t| **Function**  \t| role: **String**<br/>operation: **String**<br/>result: **Boolean**<br/>colorsEnabled: **Boolean** (optional) \t| defaultLogger \t| Function that logs operations to console \t|\n| enableLogger \t| **Boolean**   \t|                                                             \t| true          \t| Enable or disable logger                \t|\n| colors       \t| **Boolean**   \t|                                                             \t| auto-detect   \t| Enable, disable, or auto-detect color support in logger output \t|\n\n#### Creating some roles\n![step 02](./img/002.png)\n\nRBAC expects an object with roles as property names.\n\n| Property \t| Type         \t| Example                                        \t| Description                                                                                                                                                                  \t|\n|----------\t|--------------\t|------------------------------------------------\t|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------\t|\n| can      \t| **Array**    \t            | ```['products:*']```                        \t| Array of strings, list of operations that user can do, it also supports glob patterns                                                                                            |\n| when          | **Function, Async Function or Promise**       | ```(params , done ) =>  done (null , true )``` \t| **Optional** Promise that should resolve in Truthy or Falsy, an async function that returns a boolean or Promise, or a Callback function that receives params and done as properties, should return done passing errors and result \t|\n| inherits \t| **Array**    \t            | ```['user']```                                 \t| **Optional** Array of strings, list of roles inherited by this role                                                                                                               \t|\n\n###### IMPORTANT! **\"when\"** property can be a Callback function that receives params and done, an async function that returns a boolean or Promise, or a Promise that resolves in [Truthy](https://developer.mozilla.org/en-US/docs/Glossary/Truthy) or [Falsy](https://developer.mozilla.org/en-US/docs/Glossary/Falsy) values. Example: \n\n```ts\nimport type { Roles } from '@rbac/rbac';\n\ninterface Params {\n  registered: boolean;\n}\n\nconst roles: Roles<Params> = {\n  supervisor: {\n    can: [{ name: 'products:find', when: (params, done) => {\n      // done receives error as first argument and Truthy or Falsy value as second argument\n      done(null, params.registered);\n    }}]\n  },\n  admin: {\n    can: [{ name: 'products:*', when: async (params) => {\n      return params.registered;\n    } }]\n  }\n};\n\n```\n\n#### Check if user can do some operation\n![step 03](./img/03.png)\n\n| Param  \t| Type        \t                                 | Example                  \t| Description                                                    \t|\n|--------\t|----------------------------------------------- |--------------------------\t|----------------------------------------------------------------\t|\n| First  \t| **String**  \t                                 | ```'admin'```            \t| Array of strings, list of operations that user can do          \t|\n| Second \t| **String**, **Glob (Wildcard)**, **Regex**     | ```'products:find'```    \t| Operation to validate                                          \t|\n| Third  \t| **Any**     \t                                 | ```{registered: true}``` \t| **Optional** Params that will flow to \"when\" callback Function \t|\n### Update roles at runtime\n\nRBAC exposes two helpers to modify the role definition at runtime. `addRole` adds a new role and `updateRoles` merges new definitions with the existing ones.\n\n```ts\nimport RBAC from '@rbac/rbac'\n\nconst base = RBAC({ enableLogger: false })({\n  user: { can: ['products:find'] }\n})\n\nbase.addRole('editor', { can: ['products:update'], inherits: ['user'] })\nawait base.can('editor', 'products:update') // true\n\nbase.updateRoles({\n  user: { can: ['products:find', 'products:create'] }\n})\nawait base.can('user', 'products:create') // true\n```\n\n### Database adapters\n\nRBAC exposes optional adapters to load and persist role definitions using\nMongoDB, MySQL or PostgreSQL. Each adapter implements the `RoleAdapter`\ninterface with `getRoles`, `addRole` and `updateRoles` methods.\n\n```ts\nimport RBAC from '@rbac/rbac'\nimport { MongoRoleAdapter } from '@rbac/rbac/adapters'\n\nconst adapter = new MongoRoleAdapter({\n  uri: 'mongodb://localhost:27017',\n  dbName: 'mydb',\n  collection: 'roles'\n})\n\nconst roles = await adapter.getRoles()\nconst rbac = RBAC()(roles)\n```\n\nAdapters available:\n\n- `MongoRoleAdapter`\n- `MySQLRoleAdapter`\n- `PostgresRoleAdapter`\n\nAdapters also allow customizing the underlying table or collection column names\nthrough a `columns` option when creating a new instance:\n\n```ts\nconst adapter = new MySQLRoleAdapter({\n  table: 'roles',\n  columns: { name: 'rname', role: 'rdef', tenantId: 'tid' }\n})\n```\n\n### Multi-tenant RBAC\n\nAdapters can optionally receive a `tenantId` parameter to store and retrieve\nroles for different tenants. When omitted, the adapter falls back to a default\ntenant so existing single-tenant usage keeps working. Use `createTenantRBAC` to\ninstantiate an RBAC instance scoped to a tenant:\n\n```ts\nimport { MongoRoleAdapter, createTenantRBAC } from '@rbac/rbac';\n\nconst adapter = new MongoRoleAdapter({ uri: 'mongodb://localhost:27017', dbName: 'mydb', collection: 'roles' });\n\nawait adapter.addRole('user', { can: ['products:find'] }, 'tenant-a');\n\nconst rbacTenantA = await createTenantRBAC(adapter, 'tenant-a');\nawait rbacTenantA.can('user', 'products:find'); // true\n```\n\nWant more? Check out the [examples](examples/) folder.\n\n### Middlewares\n\nRBAC also provides helper middlewares for **Express**, **NestJS** and **Fastify**.\nThey make it easy to guard routes using existing role definitions.\n\n```ts\nimport RBAC, { createExpressMiddleware } from '@rbac/rbac';\n\nconst rbac = RBAC({ enableLogger: false })({\n  user: { can: ['products:find'] }\n});\n\nconst canFindProducts = createExpressMiddleware(rbac)('products:find');\n\napp.get('/products', canFindProducts, handler);\n```\n\nFor NestJS and Fastify you can use `createNestMiddleware` and `createFastifyMiddleware`\nrespectively with a similar API.\n\n### Custom Logger\n\nYou can provide a custom logger function to integrate with your logging infrastructure:\n\n```ts\nconst customLogger = (role: string, operation: string | RegExp, result: boolean) => {\n  // Send to your logging service\n  logger.info({ role, operation, result, timestamp: Date.now() });\n};\n\nconst rbac = RBAC({ logger: customLogger })(roles);\n```\n\nThe logger receives `role`, `operation`, `result`, and an optional `colorsEnabled` parameter. Disable logging with `enableLogger: false`.\n\n### Logger Color Configuration\n\nThe default logger automatically detects color support and applies ANSI color codes when appropriate. You can manually control this behavior via the `colors` configuration option:\n\n```ts\n// Force colors disabled (plain text output)\nconst rbac = RBAC({ enableLogger: true, colors: false })(roles);\n\n// Force colors enabled\nconst rbac = RBAC({ enableLogger: true, colors: true })(roles);\n\n// Auto-detect (default) - checks FORCE_COLOR, NO_COLOR, TTY, and CI environment\nconst rbac = RBAC({ enableLogger: true })(roles);\n```\n\n## Roadmap\n\n- [X] Wildcard support\n- [X] Regex support\n- [X] Update roles in runtime\n- [X] Async `when` callbacks\n- [X] Database adapters (MongoDB, MySQL, PostgreSQL)\n- [X] Middlewares for Express, NestJS and Fastify\n\n## v2.0.0\n\n- Rewritten in TypeScript\n- Internal refactor focused on readability and performance\n- Added support to update roles at runtime\n- Database adapters\n- Middlewares for Express, NestJS and Fastify\n\n## Benchmarks\n\nRun `npm run bench` to execute the performance suite. The script runs two end-to-end scenarios:\n\n- **Baseline comparison** – compares `@rbac/rbac` with AccessControl, RBAC, Easy RBAC and Fast RBAC using the default dataset.\n- **Large dataset comparison** – stresses the libraries with hundreds of resources, deep inheritance chains and three `when` flavours (callback, async function and promise).\n\nFor each scenario the suite generates detailed reports (JSON/CSV/HTML chart) under `benchmarks/results/` and prints a human-readable summary (ops/sec, margins, standard deviation, samples, etc.).\n\n```\n$ npm run bench\nRBAC Performance Comparison ops/sec: 6859456, 6193737, 4427263, ...\nRBAC Performance Comparison - Large Dataset ops/sec: 3277352, 3396327, 3424089, ...\n```\n\nThe baseline run shows @rbac/rbac leading all categories; the large dataset confirms the same behaviour when conditional checks and large permission sets come into play.\n\n## More Information\n\n- [Migration guide from v1 to v2](docs/migrating-v1-to-v2.md)\n- [Changelog](CHANGELOG.md)\n\n## Contributing\n\n#### Contributions are welcome!\n\n1. Build RBAC\n  * Run `npm install` (or `yarn install`) to get RBAC's dependencies\n  * Run `npm run build` to compile the library and produce the minified bundle using Vite\n\n2. Development mode\n  * Having all the dependencies installed run `yarn dev`. This command will generate a non-minified version of your library and will run a watcher so you get the compilation on file change.\n\n3. Running the tests\n  * Run `yarn test` \n\n4. Scripts\n* `npm run build` - produces production version of your library under the `lib` folder and generates `lib/@rbac/rbac.min.js` via Vite\n* `npm run dev` - produces development version of your library and runs a watcher\n* `npm test` - well ... it runs the tests :)\n* `npm run test:watch` - same as above but in a watch mode\n* `npm run bench` - run the benchmark suite\n\n## License\n\nThis project is under MIT License [https://opensource.org/licenses/MIT]\n","readmeFilename":"README.md"}