{"_id":"@ooneex/permission","_rev":"35-82de109893fb5d24464c33408d69a588","name":"@ooneex/permission","dist-tags":{"latest":"1.2.1"},"versions":{"0.0.1":{"name":"@ooneex/permission","version":"0.0.1","license":"MIT","_id":"@ooneex/permission@0.0.1","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"fd59e5531c6344b7346b6b57430156184a5c301f","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.1.tgz","fileCount":6,"integrity":"sha512-7C/i3N/BTqKhRcyDLNitOgn7d3kz1qAZMh87Zkrz7KABSYMPjArygDts8ALwq82+F0NUlg11MGED0QY3FhOexw==","signatures":[{"sig":"MEYCIQC8jazfv4TnBnN5u8/u0cAg5vmyUxn4et25iIxgq10JZgIhAPYPOYvyZOhuygyEBYD2He5yHYnoS4XqsQtqEfQ7bnhN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":17582},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"fd59e5531c6344b7346b6b57430156184a5c301f","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","publish:dry":"bun publish --dry-run","publish:pack":"bun pm pack --destination ./dist","publish:prod":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-7C/i3N/BTqKhRcyDLNitOgn7d3kz1qAZMh87Zkrz7KABSYMPjArygDts8ALwq82+F0NUlg11MGED0QY3FhOexw==","_npmVersion":"10.8.3","description":"","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@ooneex/role":"0.0.1","@casl/ability":"^6.7.3","@ooneex/exception":"0.0.1","@ooneex/http-status":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.1"},"peerDependencies":{},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.1_1765732076393_0.17174377637007066","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@ooneex/permission","version":"0.0.4","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.4","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"3d7ecba89b2316d9b087816032fdb180c60a83c5","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.4.tgz","fileCount":6,"integrity":"sha512-ICun/qk/P2svbUp4C5T4qlYOGSLDoOn34P2UnZ3EErBPAVNXBsON0v4vTtj2zNtomQ7bAbfiqgESMJQrxe6Usg==","signatures":[{"sig":"MEYCIQDmnCceM9FhS/r2fKscNbvjM1/cDPEdohaJW06qcxuisAIhAIr93hzeL6La5EE1ik39Wev1M9hGfjIGvV1cQHutroWe","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33606},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"3d7ecba89b2316d9b087816032fdb180c60a83c5","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","publish":"bun publish --access public || true"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-ICun/qk/P2svbUp4C5T4qlYOGSLDoOn34P2UnZ3EErBPAVNXBsON0v4vTtj2zNtomQ7bAbfiqgESMJQrxe6Usg==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.2","@ooneex/exception":"0.0.1","@ooneex/http-status":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.1"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.4_1768052134660_0.6218814731429181","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@ooneex/permission","version":"0.0.5","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.5","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"28e35e5f0f7c387d5f9422ddb376fbc33072a1d0","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.5.tgz","fileCount":6,"integrity":"sha512-k3vJRsjNjQZDjKyvxHv8XZP7IZ3hrDDhzPZaAFpobLAqVj8bnBnzpbiPIRonrRtmHghs0Jk0yA37N8RmmwKBgA==","signatures":[{"sig":"MEYCIQCvFBkVu3xtPPM2kXaV4inR9JyWXv0cGl7WbBmrEI5QsgIhAJ1fOk6RRZEeNNo5Pu7gZo2qjSgQhmdQS6p/H3jxtafR","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33623},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"28e35e5f0f7c387d5f9422ddb376fbc33072a1d0","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-k3vJRsjNjQZDjKyvxHv8XZP7IZ3hrDDhzPZaAFpobLAqVj8bnBnzpbiPIRonrRtmHghs0Jk0yA37N8RmmwKBgA==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.2","@ooneex/exception":"0.0.1","@ooneex/http-status":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.1"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.5_1768056344958_0.9629237218829318","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@ooneex/permission","version":"0.0.6","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.6","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"1d59fec1e5dcecef03f26f8d77364675fc0fa7c5","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.6.tgz","fileCount":6,"integrity":"sha512-l1/SqICGfq9wX+VfPMoyg4zYka488Kd9gFFdReEXU8ojreGtSool/wgR/A7BUdJ8h1M+bQT6QFGRqJ5FAImTTw==","signatures":[{"sig":"MEUCIQCxDUwAuHU0i5BkhaQpFjJMavEQ+/uzY6NE2Zxw/kfcqAIgL49dDl784x1A3Y0msx5SCT4LPS4KC46o0V1Xs6UmRB8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33623},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"1d59fec1e5dcecef03f26f8d77364675fc0fa7c5","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-l1/SqICGfq9wX+VfPMoyg4zYka488Kd9gFFdReEXU8ojreGtSool/wgR/A7BUdJ8h1M+bQT6QFGRqJ5FAImTTw==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.2","@ooneex/exception":"0.0.1","@ooneex/http-status":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.1"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.6_1768056773391_0.2695726823096902","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@ooneex/permission","version":"0.0.7","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.7","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"9b225bab2c84dc4d19790637924a55c9b1e04e57","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.7.tgz","fileCount":6,"integrity":"sha512-mXJm0ii/QviDrMSW3JJ84O7RTAyQM4VZnTBvUX82yAQWWOsHZ0Yd9c1hb9PE1SjHpg//9Bz9GWlX5lZehCSt9A==","signatures":[{"sig":"MEYCIQCFJ8ztpPkqJYnsy/5vgXhsE32YRMISpv2o/0LkcEVEDQIhAOtGJin4mwkZwIBKK2GBppE2QOBnTJO0z04aybEDUWU1","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33623},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"9b225bab2c84dc4d19790637924a55c9b1e04e57","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-mXJm0ii/QviDrMSW3JJ84O7RTAyQM4VZnTBvUX82yAQWWOsHZ0Yd9c1hb9PE1SjHpg//9Bz9GWlX5lZehCSt9A==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.2","@ooneex/exception":"0.0.1","@ooneex/http-status":"0.0.1"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.1"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.7_1768058342888_0.5494582082407542","host":"s3://npm-registry-packages-npm-production"}},"0.0.8":{"name":"@ooneex/permission","version":"0.0.8","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.8","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"5fc4f2581102c456e0b8531ef5d93f60e3c59294","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.8.tgz","fileCount":6,"integrity":"sha512-beFX4tsyz4X+KFvxMEL+Zmn2xDrnGk/JzSQZtqiL4/9DTjuG59pRT5ixnrXX2SAwSq5IbXsJVN0nMbTIhemtTA==","signatures":[{"sig":"MEUCIQDRS9VWLADE+/y+Uuc6zCw1Wk9MoloqY0TShqf6ESh8BwIgcSwhPKjHwQjufzYshq0MJwshNhfKAeZLhJZC0fnsl0Q=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33623},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"5fc4f2581102c456e0b8531ef5d93f60e3c59294","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-beFX4tsyz4X+KFvxMEL+Zmn2xDrnGk/JzSQZtqiL4/9DTjuG59pRT5ixnrXX2SAwSq5IbXsJVN0nMbTIhemtTA==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.9","@ooneex/exception":"0.0.8","@ooneex/http-status":"0.0.8"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.8"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.8_1768060344918_0.0033331205664623997","host":"s3://npm-registry-packages-npm-production"}},"0.0.9":{"name":"@ooneex/permission","version":"0.0.9","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.9","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"834d650aec977c948afc02a01e4bfd0147b78727","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.9.tgz","fileCount":6,"integrity":"sha512-ZwTa5OXaL/AtnwWZ8IxM4m0dVoqKqVCM+/HonuLuFQVRN4sgP/qin5PtuvucZlyvfqlT51qi6Qfhex/7YjNVTQ==","signatures":[{"sig":"MEQCICM4C+bwtC2+diNVq6D/3s98ug8gCVBCrV2O2Db/QzNbAiBRVil2tsFbkHHiHt2GiRinZ2898jlFwEdMj8X8VxNPrQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33623},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"834d650aec977c948afc02a01e4bfd0147b78727","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-ZwTa5OXaL/AtnwWZ8IxM4m0dVoqKqVCM+/HonuLuFQVRN4sgP/qin5PtuvucZlyvfqlT51qi6Qfhex/7YjNVTQ==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.9","@ooneex/exception":"0.0.8","@ooneex/http-status":"0.0.8"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.8"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.9_1768063533342_0.930616817714633","host":"s3://npm-registry-packages-npm-production"}},"0.0.10":{"name":"@ooneex/permission","version":"0.0.10","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.10","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"e0a3b5ce0cff7d7357e2b06952649ab800db1e20","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.10.tgz","fileCount":6,"integrity":"sha512-QvquJN/bOITqghgbWuWnffjDqc7yYzqKB9oxGHtVkNWbQzDT/sdQJ4nTYrMgqz8hJyN2hX7vQXnscS6ZiTxNSQ==","signatures":[{"sig":"MEYCIQD5H6YpWPRUhWYWvUOoQ6Msef52JZpdRqYDIhwmvV4tzgIhAN3iT1Kw9qWZ7U9XAfLDqZoS5hhCUF5ET4EV0Eaxzg/J","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33628},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"e0a3b5ce0cff7d7357e2b06952649ab800db1e20","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-QvquJN/bOITqghgbWuWnffjDqc7yYzqKB9oxGHtVkNWbQzDT/sdQJ4nTYrMgqz8hJyN2hX7vQXnscS6ZiTxNSQ==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.11","@ooneex/exception":"0.0.10","@ooneex/http-status":"0.0.10"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.10"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.10_1768065170146_0.16805494223666484","host":"s3://npm-registry-packages-npm-production"}},"0.0.11":{"name":"@ooneex/permission","version":"0.0.11","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.11","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"566e0daabd98190cb0f5d5a91008186ceade54f3","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.11.tgz","fileCount":6,"integrity":"sha512-eT8+57v50KeRn9zyYzcLuVlARefRmJ+GELsY8m20hA5yv3A8Oq0eY9+DSMOuzRIzRsv/wxnyYqASf0pYu7nShQ==","signatures":[{"sig":"MEUCIQD+byQy2/zCsWD85KvdbeAz9kRpKMX5ZQYU+ZCsFV7MAgIgOE2uGgvGra8C/heT+PvUyKQXxB6EH8LWtbv5FaB1Vcc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33628},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"566e0daabd98190cb0f5d5a91008186ceade54f3","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-eT8+57v50KeRn9zyYzcLuVlARefRmJ+GELsY8m20hA5yv3A8Oq0eY9+DSMOuzRIzRsv/wxnyYqASf0pYu7nShQ==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.11","@ooneex/exception":"0.0.10","@ooneex/http-status":"0.0.10"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.10"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.11_1768067579078_0.7078556787821206","host":"s3://npm-registry-packages-npm-production"}},"0.0.12":{"name":"@ooneex/permission","version":"0.0.12","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.12","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"a4837c6d660a2f96a8aeca2fdf5efc8a892ee433","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.12.tgz","fileCount":6,"integrity":"sha512-P9C9fHmhvIcpF+IE1+IRttDN5bzLPkiZxaogSPeKZ1sB6moAyQnFtuI4g4/DQ3zFtwbkaD5+W8M8xgXmv7ErKA==","signatures":[{"sig":"MEUCIEhKWPTIw5d38Zc81rjOp9GLZRaVTvzkUvdTVDlYiP45AiEAu1VKRvCxnhtX1rKYQMapy/gN5wQEYS+44IxkaJVn454=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33628},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"a4837c6d660a2f96a8aeca2fdf5efc8a892ee433","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-P9C9fHmhvIcpF+IE1+IRttDN5bzLPkiZxaogSPeKZ1sB6moAyQnFtuI4g4/DQ3zFtwbkaD5+W8M8xgXmv7ErKA==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.12","@ooneex/exception":"0.0.11","@ooneex/http-status":"0.0.11"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.11"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.12_1768072773011_0.21502346233757863","host":"s3://npm-registry-packages-npm-production"}},"0.0.13":{"name":"@ooneex/permission","version":"0.0.13","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.13","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"b6fa103c062861b249854c5cce377261e341df8d","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.13.tgz","fileCount":6,"integrity":"sha512-BAaRV9kFmtn9Mnsk/5OBH2jGZkfBBx5ETUPTVkhGoZR2Ne1EHrGEz73cT3lqv64lrT6BQP645qd96g0xXrHQ/w==","signatures":[{"sig":"MEUCIET7nwEBV30kJ0uY3YhOZmUPCN0az1IUlkAN8e2Zu1fpAiEA2vxHyujZCH+UQAdyOWJdXE40a0FSpYGIg8InS1mfSlE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36764},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"b6fa103c062861b249854c5cce377261e341df8d","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-BAaRV9kFmtn9Mnsk/5OBH2jGZkfBBx5ETUPTVkhGoZR2Ne1EHrGEz73cT3lqv64lrT6BQP645qd96g0xXrHQ/w==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.12","@ooneex/exception":"0.0.11","@ooneex/http-status":"0.0.11"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.11"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.13_1768207926606_0.11386780282462095","host":"s3://npm-registry-packages-npm-production"}},"0.0.14":{"name":"@ooneex/permission","version":"0.0.14","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.14","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"ccca30504c8699427298d500a735b642e6427867","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.14.tgz","fileCount":6,"integrity":"sha512-MNyfHlpXwNIEf1B5GRqJ7Oa0gW3lakWxmWNXPdJ6JadR0Sz86dyQ5XqwfiJrOcObVsQ0aYbGA6cJWbgQeskrOw==","signatures":[{"sig":"MEQCIG6+z4sj4bdkLMxOVTIZ8JRWnb6Bdtatnj0oGJs+VCk/AiBxObUILOv8ch8QVnCDDIi2pGFhwxaYxEipKb8xuqBOSw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36764},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"ccca30504c8699427298d500a735b642e6427867","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-MNyfHlpXwNIEf1B5GRqJ7Oa0gW3lakWxmWNXPdJ6JadR0Sz86dyQ5XqwfiJrOcObVsQ0aYbGA6cJWbgQeskrOw==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.14","@ooneex/exception":"0.0.13","@ooneex/http-status":"0.0.13"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.13"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.14_1768215984485_0.008138251130553664","host":"s3://npm-registry-packages-npm-production"}},"0.0.15":{"name":"@ooneex/permission","version":"0.0.15","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.15","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"a7a4415295d0f55ad50c937ea23a31d3a3cd51c1","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.15.tgz","fileCount":6,"integrity":"sha512-rpgbS+GP9mvCbzyM88zGCHkPGbRaQ/tW/VWCXzq/FQ7WVDVeqF3yDVU3VZmnH4k+DQvNoqmsnDyeGeDhhvSMeg==","signatures":[{"sig":"MEQCIDfUkLVbvbo+KtjJVX8wpOYyGhnXjW9A9vFNwEOKr4rWAiB/m0DhLfu4tofX4pTw1EZv8Sl2bSiX8ch3q5yoPr0MAA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33628},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"a7a4415295d0f55ad50c937ea23a31d3a3cd51c1","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-rpgbS+GP9mvCbzyM88zGCHkPGbRaQ/tW/VWCXzq/FQ7WVDVeqF3yDVU3VZmnH4k+DQvNoqmsnDyeGeDhhvSMeg==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.14","@ooneex/exception":"0.0.13","@ooneex/http-status":"0.0.13"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.13"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.15_1768234964861_0.4576168042991249","host":"s3://npm-registry-packages-npm-production"}},"0.0.16":{"name":"@ooneex/permission","version":"0.0.16","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.16","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"f404352bae5658f70ac95e19f9c71bcc73e5560d","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.16.tgz","fileCount":6,"integrity":"sha512-uK7kp+P4owKwzRb+uNOvSA4L0cA4V0IjL7O15ph1ioId6yFEj0X1Iq1dvIIWwLYVwKeXV/Bne0Sox8AJDs+Kiw==","signatures":[{"sig":"MEQCIAT7MlT5xRCOsHFzm2L69g/ep1Ov/N8D7wj+CydaFIyXAiBEudEUtJ7wl12PkQtfSzZlxfcOFfczy5ae4d7ZoF1XIQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33628},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"f404352bae5658f70ac95e19f9c71bcc73e5560d","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-uK7kp+P4owKwzRb+uNOvSA4L0cA4V0IjL7O15ph1ioId6yFEj0X1Iq1dvIIWwLYVwKeXV/Bne0Sox8AJDs+Kiw==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.17","@ooneex/exception":"0.0.16","@ooneex/http-status":"0.0.16"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.16"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.16_1768321379030_0.06919584802277146","host":"s3://npm-registry-packages-npm-production"}},"0.0.17":{"name":"@ooneex/permission","version":"0.0.17","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.17","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"b459dcb0f9127a750906a336b47e7d60910597de","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.17.tgz","fileCount":6,"integrity":"sha512-YN1+QdKG2MopNYR6JWa7w+HJu4Ddk7JeBN4Ztnq3Kare2ExO1VqB8/HFtuXYZiRit0LtdqZNUEZk3JD4IV1pOA==","signatures":[{"sig":"MEYCIQCoPVcRfTPNTue9eaiGKjxfj+WtuBk7p6ZuPc+Hvb4oLgIhAN4puRYk5OMYWpSBXpVJtJDUbJyQOjxig+uol4aSGLiQ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33628},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"b459dcb0f9127a750906a336b47e7d60910597de","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-YN1+QdKG2MopNYR6JWa7w+HJu4Ddk7JeBN4Ztnq3Kare2ExO1VqB8/HFtuXYZiRit0LtdqZNUEZk3JD4IV1pOA==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.17","@ooneex/exception":"0.0.16","@ooneex/http-status":"0.0.16"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.16"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.17_1768459841233_0.09759619289395749","host":"s3://npm-registry-packages-npm-production"}},"0.0.18":{"name":"@ooneex/permission","version":"0.0.18","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@0.0.18","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"332d2a8c01b4c6af1fb7d0e5d3f51538f3230e3f","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-0.0.18.tgz","fileCount":6,"integrity":"sha512-tDU9+oVmqGAjdKqPG/ft1c+8ymW/Q7r3o86A44wZRaxTQ8EJ2GjuFIvj19LbdiPY7tzBGvmAotuMPkP9/+Ii0A==","signatures":[{"sig":"MEQCICCZ2pjkJ7aEX2fRBHhnDrOwk2S7i4IvnwuUwHQT7JP0AiAoY/Y3q3FJJyNa2zsnPDhOirULw91pmXgrelU1C76jUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33628},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"332d2a8c01b4c6af1fb7d0e5d3f51538f3230e3f","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-tDU9+oVmqGAjdKqPG/ft1c+8ymW/Q7r3o86A44wZRaxTQ8EJ2GjuFIvj19LbdiPY7tzBGvmAotuMPkP9/+Ii0A==","_npmVersion":"10.8.3","description":"Ability-based access control using CASL for fine-grained permission management","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.18","@ooneex/exception":"0.0.17","@ooneex/http-status":"0.0.17"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.17"},"_npmOperationalInternal":{"tmp":"tmp/permission_0.0.18_1768914541353_0.648679306668767","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@ooneex/permission","version":"1.0.0","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.0.0","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"c1ace5c0aee2a430c24b5a1ad62862ae5dc813a9","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.0.0.tgz","fileCount":6,"integrity":"sha512-8ptxHuiWv9y6zsIN38NuMqEzD0B+w3Bfc0Z7GWvv3rfUDU6e3XdB7GQzq9U7JtMard9vL3GO/ESB70HMlR8XxA==","signatures":[{"sig":"MEUCICPFGGBGBIqiaiH+tSD2v75nfMMtKd9IFrPYgJDNKjInAiEA/mjVkVMsbXE9NvcEXLpA/5Fg69xjNuTxfrr7234rmJ0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33094},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"c1ace5c0aee2a430c24b5a1ad62862ae5dc813a9","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-8ptxHuiWv9y6zsIN38NuMqEzD0B+w3Bfc0Z7GWvv3rfUDU6e3XdB7GQzq9U7JtMard9vL3GO/ESB70HMlR8XxA==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"0.0.19","@ooneex/exception":"0.0.18","@ooneex/http-status":"0.0.18"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"0.0.19"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.0.0_1774596697052_0.33404326381392924","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@ooneex/permission","version":"1.0.1","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.0.1","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"fe3385b57ea67fb87186c08009f63d86bf6ca053","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.0.1.tgz","fileCount":6,"integrity":"sha512-e1tqwy3mclXheyMU7iELNwNcYxSqaajOB/1a7m5hXCcTmcg2E+zZvIiIk8NL7/QheOviE9P4fHQIhJtCofPuXQ==","signatures":[{"sig":"MEYCIQD2Cu9T2IGDwIgGvUtIJH+JzY6rlm/tVF9b+ldvw64H1AIhAOEgRy8US5X50KNPgMdJ8yAUU2ipxHaWaWhCvA/EG/nG","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33111},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"fe3385b57ea67fb87186c08009f63d86bf6ca053","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-e1tqwy3mclXheyMU7iELNwNcYxSqaajOB/1a7m5hXCcTmcg2E+zZvIiIk8NL7/QheOviE9P4fHQIhJtCofPuXQ==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.0.1","@ooneex/exception":"1.0.1","@ooneex/http-status":"1.0.1"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.0.1"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.0.1_1774608291728_0.7476377336558897","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@ooneex/permission","version":"1.1.0","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.0","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"d6b362123aeee93c41cd5d4f29f03b6e324467ab","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.0.tgz","fileCount":6,"integrity":"sha512-tU2KMmSYG1Sia/zAx4eT3TZci6rb5jFbMsAdUEuqqVIT1D0TXOrS717HqKzLd367sbCvasNRPAS58BmoACHcHg==","signatures":[{"sig":"MEUCIQCi3NL8Q5lNKUJbniMfSoXkRF6JsCZ2IAxPFNobsHZ0OAIgAQdPlOVpkhyjWPjzcB7NXxSQCLCbKy4T6HCTpEroqVA=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33111},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"d6b362123aeee93c41cd5d4f29f03b6e324467ab","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-tU2KMmSYG1Sia/zAx4eT3TZci6rb5jFbMsAdUEuqqVIT1D0TXOrS717HqKzLd367sbCvasNRPAS58BmoACHcHg==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.1.0","@ooneex/exception":"1.1.0","@ooneex/http-status":"1.1.0"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.1.0"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.0_1774727442058_0.5262165460984394","host":"s3://npm-registry-packages-npm-production"}},"1.1.1":{"name":"@ooneex/permission","version":"1.1.1","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.1","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"082940439da36328416990ee4631c816278d19ee","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.1.tgz","fileCount":6,"integrity":"sha512-6NkL8Dv6NCPfTb+W0OEVLV8Wcw/0Ce+Lvb/jULx/+rrrMtvjjY+7NSQkYS02l89LgP3BR8n9+AeM7yM0keN+Fw==","signatures":[{"sig":"MEQCIACm9wKx/XvQn5irJXCY2hYa95HSuB+LgQepwsbNQlPeAiBVlalgCRl5yklMa+01OFle1rIHsocVfqJ60jZTQV+Xtg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33111},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"082940439da36328416990ee4631c816278d19ee","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-6NkL8Dv6NCPfTb+W0OEVLV8Wcw/0Ce+Lvb/jULx/+rrrMtvjjY+7NSQkYS02l89LgP3BR8n9+AeM7yM0keN+Fw==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.1.1","@ooneex/exception":"1.1.1","@ooneex/http-status":"1.1.1"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.1.1"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.1_1774806214528_0.3649206160294045","host":"s3://npm-registry-packages-npm-production"}},"1.1.2":{"name":"@ooneex/permission","version":"1.1.2","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.2","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"f860bc2988095d1580a9ae707eaca6639217c30d","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.2.tgz","fileCount":6,"integrity":"sha512-fI5fsBMBAxOF5N6g5fYO27Gn8s1j+4Cx9Cn9w8Mafxd4Jaw72f2+GpcERrMUOsQWMsaKPrG0jlwO6LS+r6dGzw==","signatures":[{"sig":"MEQCIBmriwISr5k6eYjucFvXUZC/t9BpHjU8mJ46qndBsQz7AiAeU26cFM3XvJ410GIHhj0iOSzImtB5bnGNlWL2+atB+w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33111},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"f860bc2988095d1580a9ae707eaca6639217c30d","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-fI5fsBMBAxOF5N6g5fYO27Gn8s1j+4Cx9Cn9w8Mafxd4Jaw72f2+GpcERrMUOsQWMsaKPrG0jlwO6LS+r6dGzw==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.1.2","@ooneex/exception":"1.1.2","@ooneex/http-status":"1.1.2"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.1.2"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.2_1774813332960_0.6571938143388572","host":"s3://npm-registry-packages-npm-production"}},"1.1.3":{"name":"@ooneex/permission","version":"1.1.3","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.3","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"b9713b22bf3d3f9370a962d07680428279f056fa","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.3.tgz","fileCount":6,"integrity":"sha512-VPnl8sfS+5aD9Y/yhxQqspif/yR7jIbqiLnjxAIFJJh3/rh9ItdUtFRzrjafY5qa5YtFWrCCXov42sSJMmVS6g==","signatures":[{"sig":"MEYCIQD1RVIoocLKVPUkqwQgXx+UWPYDARaXVMp64gwPhmsamAIhANKJkGwgWcozKmlLUC7SU8kwdBp0cwg4ovmDYfDM6mDF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":33204},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"b9713b22bf3d3f9370a962d07680428279f056fa","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-VPnl8sfS+5aD9Y/yhxQqspif/yR7jIbqiLnjxAIFJJh3/rh9ItdUtFRzrjafY5qa5YtFWrCCXov42sSJMmVS6g==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.1.2","@ooneex/exception":"1.1.2","@ooneex/http-status":"1.1.2"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.3_1775056652402_0.20526697025428264","host":"s3://npm-registry-packages-npm-production"}},"1.1.4":{"name":"@ooneex/permission","version":"1.1.4","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.4","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"7f8e518ae7e495756c451929958505326329fc39","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.4.tgz","fileCount":6,"integrity":"sha512-bPIYS8h0mSqHiUo6VEtTDjbr/4r5S8OQYuHfMf1SrZpaVEgyNl83yBC9AsM0ygfKcJydCrtQoeeaedi4Mi3AnA==","signatures":[{"sig":"MEUCIGwlRm91LznY4g/IuCvnyUXkJZhXlg+yBjH7yT1JKK+nAiEA9Nqd0g7KcVEsDCeTowIUEYtXnvfX5yb/9D4a1GhedZ8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36247},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"7f8e518ae7e495756c451929958505326329fc39","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-bPIYS8h0mSqHiUo6VEtTDjbr/4r5S8OQYuHfMf1SrZpaVEgyNl83yBC9AsM0ygfKcJydCrtQoeeaedi4Mi3AnA==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.1.2","@ooneex/exception":"1.1.2","@ooneex/http-status":"1.1.2"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.2.0"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.4_1775063399142_0.18704611107905333","host":"s3://npm-registry-packages-npm-production"}},"1.1.5":{"name":"@ooneex/permission","version":"1.1.5","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.5","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"3cb988425364ad6d928fa4970471198dc9fb09b8","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.5.tgz","fileCount":6,"integrity":"sha512-Tgdd3JM6yat3yVz4jW4EfrxdblgQuCfBTYxIrnwQvp7kIIQZT4HnsnSrgcj7yz6nzxD05Mnai9HSx5R+aPvY7Q==","signatures":[{"sig":"MEYCIQCtWSzWbrgCSkc42Z3EWbyWCkoVhmsNTgYnFKYUFzD1cAIhAN86F6Howp47o/iN+x1A6/fpD/eSa6nDMjvn/pR/AT9r","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36382},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"3cb988425364ad6d928fa4970471198dc9fb09b8","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-Tgdd3JM6yat3yVz4jW4EfrxdblgQuCfBTYxIrnwQvp7kIIQZT4HnsnSrgcj7yz6nzxD05Mnai9HSx5R+aPvY7Q==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.2.1","@ooneex/exception":"1.1.3","@ooneex/http-status":"1.1.3"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.5_1775422808867_0.9156248500377606","host":"s3://npm-registry-packages-npm-production"}},"1.1.6":{"name":"@ooneex/permission","version":"1.1.6","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.6","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"e387707cd53f216e5a9b9072910f73cd35abfb82","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.6.tgz","fileCount":6,"integrity":"sha512-cgIYwrR9RaLDmzpdcMPe+klVAFXQ26fWDYf26gA0Mkxj33E8FHaB+N+RZ0KQ4Qfrhf46UlbAV048jjilGiYNrw==","signatures":[{"sig":"MEYCIQDqitZ6M9/h8pKlYyvNsV+Ovjl/Jn6GWr5an2M3IL+gtQIhAP7UeOMUVfSHvvJes5kZ48u3OdQw9FMOwkbGl1nhdsBb","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36382},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"e387707cd53f216e5a9b9072910f73cd35abfb82","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-cgIYwrR9RaLDmzpdcMPe+klVAFXQ26fWDYf26gA0Mkxj33E8FHaB+N+RZ0KQ4Qfrhf46UlbAV048jjilGiYNrw==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.2.2","@ooneex/exception":"1.2.0","@ooneex/http-status":"1.1.3"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.2.1"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.6_1775540429454_0.9212681972434558","host":"s3://npm-registry-packages-npm-production"}},"1.1.7":{"name":"@ooneex/permission","version":"1.1.7","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.7","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"7da784a7aae653674e30a18cee360e1c3ef91bbe","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.7.tgz","fileCount":6,"integrity":"sha512-QS11yii1/O78yaubMB0vpgkh4ZlcE0lmH8l/vUNdGGSoocO7i7mWkugdCtAKzIdzit9e/3yhqSJxjLO9xN9b2w==","signatures":[{"sig":"MEYCIQDzyTf2KvZEF/Yfvy3Un6OnDIvg8rEUrFNmw8ghBrc7tgIhAIFItZ46myQh/mbRhLT7K3NDVPL1edjOLO4PaU0Gj0pt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36382},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"7da784a7aae653674e30a18cee360e1c3ef91bbe","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-QS11yii1/O78yaubMB0vpgkh4ZlcE0lmH8l/vUNdGGSoocO7i7mWkugdCtAKzIdzit9e/3yhqSJxjLO9xN9b2w==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.2.3","@ooneex/exception":"1.2.1","@ooneex/http-status":"1.1.4"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.2.2"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.7_1775549359929_0.502582963875023","host":"s3://npm-registry-packages-npm-production"}},"1.1.9":{"name":"@ooneex/permission","version":"1.1.9","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.9","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"dc42d499641fa29a06ee04109e2640393b05d918","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.9.tgz","fileCount":6,"integrity":"sha512-jC539cZEFD8JNnRTvRmhmo/Qji18CGAbPv6bKVxUYiFjZM/1lzyb9AutgKv+CMOH/GkyiyTpbmQ7yGPgLegczA==","signatures":[{"sig":"MEUCIDNtfsKq/8DYe4PU5R5hIUwixIzr/E2av7/GAcyXPhsUAiEArXRWS5ER36bgRskZXcqMJQvCwb/391ehSnfGKUwdL2c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36382},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"dc42d499641fa29a06ee04109e2640393b05d918","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-jC539cZEFD8JNnRTvRmhmo/Qji18CGAbPv6bKVxUYiFjZM/1lzyb9AutgKv+CMOH/GkyiyTpbmQ7yGPgLegczA==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.3.2","@ooneex/exception":"1.2.3","@ooneex/http-status":"1.1.6"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.2.4"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.9_1775628633149_0.027612280052434546","host":"s3://npm-registry-packages-npm-production"}},"1.1.10":{"name":"@ooneex/permission","version":"1.1.10","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.10","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"45fd79485cb2e0c9be2f4bb365f93fb1d2e75bde","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.10.tgz","fileCount":6,"integrity":"sha512-QWzVMgHDnvb6j1Ov8t+A+R3ZjRtLGi9fTHK79grvwVDo1yO+aSimao4g9KjZdj3jkPPXT2GxBhEMpOGmIbm3BA==","signatures":[{"sig":"MEUCIBfnpxA/vU37NQ5M+C74Tey++F1tmUDS/IgUAMVc0l10AiEAlz4CGYxslBvSY2lUrm6s01cPsGuh0z9wbhTZSCvlkWQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36383},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"45fd79485cb2e0c9be2f4bb365f93fb1d2e75bde","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-QWzVMgHDnvb6j1Ov8t+A+R3ZjRtLGi9fTHK79grvwVDo1yO+aSimao4g9KjZdj3jkPPXT2GxBhEMpOGmIbm3BA==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.3.4","@ooneex/exception":"1.2.5","@ooneex/http-status":"1.1.8"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.2.6"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.10_1775629519070_0.6493204166052788","host":"s3://npm-registry-packages-npm-production"}},"1.1.11":{"name":"@ooneex/permission","version":"1.1.11","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.11","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"bee25c262f738851ba7cf550f0f4897045948bff","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.11.tgz","fileCount":6,"integrity":"sha512-cxc0NfgCOXBKjYKdXIZ8QkRj87fX537Zoviiv0akPwdqFt9DlZJLnztHA7GV4hRPTWY2cikSQBvbokAOt5dXVA==","signatures":[{"sig":"MEUCIQC5Y9cza++xQ0jfehrMyOdHq2gIBqbZxWuIp4myLHwRVwIgfzDKTLSlVso6efyWB9bV4+TY3QLVTbqr0SYLEG2wUVg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36383},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"bee25c262f738851ba7cf550f0f4897045948bff","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-cxc0NfgCOXBKjYKdXIZ8QkRj87fX537Zoviiv0akPwdqFt9DlZJLnztHA7GV4hRPTWY2cikSQBvbokAOt5dXVA==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"1.4.0","@ooneex/exception":"1.2.6","@ooneex/http-status":"1.1.9"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"1.2.7"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.11_1775630828288_0.7346578234899419","host":"s3://npm-registry-packages-npm-production"}},"1.1.12":{"name":"@ooneex/permission","version":"1.1.12","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.12","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"dcbb8c9fc1e76281338558977cec81e18d040cfa","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.12.tgz","fileCount":6,"integrity":"sha512-WiiVzTeeofJzH7ZITEMVsEShdVi5vYykh9BhcoU9uBB1Ez4C+KNH786TQ3SC9OWZi5XLfxlutXGVfM5beIrevA==","signatures":[{"sig":"MEYCIQCjcNXDWA6QqB4d+4b4bJpPAQZIMqQEQfHyk6wHXfXthgIhANxr8g39XLU2w+RvbOhncqj4PxEp71fV/RkwBrQsOVYF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":36387},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"dcbb8c9fc1e76281338558977cec81e18d040cfa","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-WiiVzTeeofJzH7ZITEMVsEShdVi5vYykh9BhcoU9uBB1Ez4C+KNH786TQ3SC9OWZi5XLfxlutXGVfM5beIrevA==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"^1.4.2","@ooneex/exception":"^1.2.7","@ooneex/http-status":"^1.1.9"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"^1.2.8"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.12_1775710124579_0.7719067117159106","host":"s3://npm-registry-packages-npm-production"}},"1.1.13":{"name":"@ooneex/permission","version":"1.1.13","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.13","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"277d6b3202f5a60940e40b6ac5b4a6e22e4d294f","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.13.tgz","fileCount":6,"integrity":"sha512-MIAcU2YZqR/gL751ZX5IyB+K99cvNU1H6Jh2Q55zgDcPVCde2rYaUtOcdn1mcqJ/zskwXj06uNqBqY2c2zsk2A==","signatures":[{"sig":"MEQCIFeXUhrURUVtEDfH0LU3jI4ZGfRAMIbrozaO10BhCpnIAiAYFE43rDv9M4EDxOZGUmJb3+7uhJgOtKnpmeMAatCPYw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38299},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"277d6b3202f5a60940e40b6ac5b4a6e22e4d294f","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-MIAcU2YZqR/gL751ZX5IyB+K99cvNU1H6Jh2Q55zgDcPVCde2rYaUtOcdn1mcqJ/zskwXj06uNqBqY2c2zsk2A==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"^1.4.4","@ooneex/exception":"^1.2.7","@ooneex/http-status":"^1.1.9"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"^1.2.8"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.13_1775988730458_0.3374998669627729","host":"s3://npm-registry-packages-npm-production"}},"1.1.14":{"name":"@ooneex/permission","version":"1.1.14","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.14","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"02a939987a0135a6bd28a9b4fcb2665b9fc049ba","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.14.tgz","fileCount":6,"integrity":"sha512-ahWMBR70Xkf7Y2Og659mA/+jX0S3ai3mW6/p84dn45AW7Au5OgXqF2Lt8Gr1m414GP2FKbavC0Br9PIodIF8PA==","signatures":[{"sig":"MEUCIQC6++MU+FPEnJeeEEUP6CXvY6223AU+3h5RD2sgNVGasAIgQiEktGxPnAE8spoMADrBFLV6ZgaszI5oVBxUgA/kmX0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38300},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"02a939987a0135a6bd28a9b4fcb2665b9fc049ba","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-ahWMBR70Xkf7Y2Og659mA/+jX0S3ai3mW6/p84dn45AW7Au5OgXqF2Lt8Gr1m414GP2FKbavC0Br9PIodIF8PA==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"^1.4.5","@ooneex/exception":"^1.2.8","@ooneex/http-status":"^1.1.10"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"^1.2.9"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.14_1776006476970_0.053791832769927606","host":"s3://npm-registry-packages-npm-production"}},"1.1.15":{"name":"@ooneex/permission","version":"1.1.15","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.1.15","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"da018475895539cb4bae09b9d2e7620d3ad5cc7c","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.1.15.tgz","fileCount":6,"integrity":"sha512-ARYbWLPtmk7Dx9rpZB6RE3QJTW1Qt2Lk2dcl1ho9Gbd0WnZ9BCS34E2cqEcf+FWUSorns983E6kKL5/zJKCihQ==","signatures":[{"sig":"MEYCIQCwJRPpaG/PQCXF+Dp+TqVAHU8Wa/qTwNGOUF8QOvcmoAIhAJbBf8B0TsGZXTQQMyEtf405XobI0UIBmRSqzqD0S2RL","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38301},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"da018475895539cb4bae09b9d2e7620d3ad5cc7c","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-ARYbWLPtmk7Dx9rpZB6RE3QJTW1Qt2Lk2dcl1ho9Gbd0WnZ9BCS34E2cqEcf+FWUSorns983E6kKL5/zJKCihQ==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"^1.5.0","@ooneex/exception":"^1.2.9","@ooneex/http-status":"^1.1.11"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"^1.2.10"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.1.15_1776008186964_0.8805366496210434","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"@ooneex/permission","version":"1.2.0","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"license":"MIT","_id":"@ooneex/permission@1.2.0","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"dist":{"shasum":"0194e7df0ce2c90d9ff610b3fce2ba9d034e042d","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.2.0.tgz","fileCount":6,"integrity":"sha512-YF99YxYAlac9D5IYqzc7C+Fijz5TrVOZfUQzF4jPNus1lmJ/Q2uUYwmGWOKOFZVRPSyE/RS3Keps0v2bQ/S3kQ==","signatures":[{"sig":"MEYCIQCZ2vuofsxUxkg6NutVfaaupCJ5Pp3fiDUfrUc6GI7P5AIhAJrUqHto5CZKxpk8ZYnSjzvxrmeeOzylshnjQaSbewxA","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":38629},"type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","shasum":"0194e7df0ce2c90d9ff610b3fce2ba9d034e042d","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"scripts":{"lint":"tsgo --noEmit && bunx biome lint","test":"bun test tests","build":"bunup","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"_integrity":"sha512-YF99YxYAlac9D5IYqzc7C+Fijz5TrVOZfUQzF4jPNus1lmJ/Q2uUYwmGWOKOFZVRPSyE/RS3Keps0v2bQ/S3kQ==","_npmVersion":"10.8.3","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","directories":{},"_nodeVersion":"24.3.0","dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"^1.5.1","@ooneex/exception":"^1.2.9","@ooneex/http-status":"^1.1.11"},"_hasShrinkwrap":false,"devDependencies":{"@ooneex/user":"^1.2.10"},"_npmOperationalInternal":{"tmp":"tmp/permission_1.2.0_1776092814669_0.8962522641527197","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"@ooneex/permission","description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","version":"1.2.1","type":"module","module":"./dist/index.js","types":"./dist/index.d.ts","exports":{".":{"import":{"types":"./dist/index.d.ts","default":"./dist/index.js"}},"./package.json":"./package.json"},"license":"MIT","scripts":{"test":"bun test tests","build":"bunup","lint":"tsgo --noEmit && bunx biome lint","npm:publish":"bun publish --tolerate-republish --force --production --access public"},"dependencies":{"@casl/ability":"^6.7.3","@ooneex/container":"^1.5.1","@ooneex/exception":"^1.2.10","@ooneex/http-status":"^1.1.11"},"devDependencies":{"@ooneex/user":"^1.2.11"},"keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"_id":"@ooneex/permission@1.2.1","_integrity":"sha512-P8+z/NjoIgoddMcyoeE8cT3iaEQ2fG3OaMD30eqCK8JrksLtVJ0F9TXpP/lKADmnbdEYvdflxhkE9Y/Te3AyeA==","_nodeVersion":"24.3.0","_npmVersion":"10.8.3","shasum":"d60a4cafeba2b4856c9a5cc3d0d7e0088dc0969e","dist":{"integrity":"sha512-P8+z/NjoIgoddMcyoeE8cT3iaEQ2fG3OaMD30eqCK8JrksLtVJ0F9TXpP/lKADmnbdEYvdflxhkE9Y/Te3AyeA==","shasum":"d60a4cafeba2b4856c9a5cc3d0d7e0088dc0969e","tarball":"https://registry.npmjs.org/@ooneex/permission/-/permission-1.2.1.tgz","fileCount":6,"unpackedSize":38607,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIG2thx9ZLAs/vhgssDNFZTzq28UnDzCQPLb8SiNO9cx6AiAvjQ38NwIFs19kx2XmhHauziHqbhYw2GOgtW/PRxWRTw=="}]},"_npmUser":{"name":"fkdiomande","email":"fkdiomande@icloud.com"},"directories":{},"maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/permission_1.2.1_1779556001651_0.6933475791017201"},"_hasShrinkwrap":false}},"time":{"created":"2025-12-14T17:07:56.319Z","modified":"2026-05-23T17:06:41.981Z","0.0.1":"2025-12-14T17:07:56.551Z","0.0.4":"2026-01-10T13:35:34.787Z","0.0.5":"2026-01-10T14:45:45.097Z","0.0.6":"2026-01-10T14:52:53.539Z","0.0.7":"2026-01-10T15:19:03.033Z","0.0.8":"2026-01-10T15:52:25.066Z","0.0.9":"2026-01-10T16:45:33.481Z","0.0.10":"2026-01-10T17:12:50.293Z","0.0.11":"2026-01-10T17:52:59.201Z","0.0.12":"2026-01-10T19:19:33.168Z","0.0.13":"2026-01-12T08:52:06.740Z","0.0.14":"2026-01-12T11:06:24.621Z","0.0.15":"2026-01-12T16:22:45.014Z","0.0.16":"2026-01-13T16:22:59.172Z","0.0.17":"2026-01-15T06:50:41.368Z","0.0.18":"2026-01-20T13:09:01.490Z","1.0.0":"2026-03-27T07:31:37.200Z","1.0.1":"2026-03-27T10:44:51.888Z","1.1.0":"2026-03-28T19:50:42.199Z","1.1.1":"2026-03-29T17:43:34.671Z","1.1.2":"2026-03-29T19:42:13.096Z","1.1.3":"2026-04-01T15:17:32.559Z","1.1.4":"2026-04-01T17:09:59.292Z","1.1.5":"2026-04-05T21:00:09.073Z","1.1.6":"2026-04-07T05:40:29.575Z","1.1.7":"2026-04-07T08:09:20.091Z","1.1.9":"2026-04-08T06:10:33.338Z","1.1.10":"2026-04-08T06:25:19.208Z","1.1.11":"2026-04-08T06:47:08.417Z","1.1.12":"2026-04-09T04:48:44.733Z","1.1.13":"2026-04-12T10:12:10.613Z","1.1.14":"2026-04-12T15:07:57.106Z","1.1.15":"2026-04-12T15:36:27.099Z","1.2.0":"2026-04-13T15:06:54.801Z","1.2.1":"2026-05-23T17:06:41.839Z"},"license":"MIT","keywords":["authorization","bun","casl","ooneex","permission","permissions","rbac","typescript"],"description":"Fine-grained access control using CASL — define, evaluate, and enforce ability-based permissions with role and resource scoping","maintainers":[{"name":"fkdiomande","email":"fkdiomande@icloud.com"}],"readme":"# @ooneex/permission\n\nFine-grained access control using CASL -- define, evaluate, and enforce ability-based permissions with role and resource scoping.\n\n![Browser](https://img.shields.io/badge/Browser-Compatible-green?style=flat-square&logo=googlechrome)\n![Bun](https://img.shields.io/badge/Bun-Compatible-orange?style=flat-square&logo=bun)\n![TypeScript](https://img.shields.io/badge/TypeScript-Ready-blue?style=flat-square&logo=typescript)\n![MIT License](https://img.shields.io/badge/License-MIT-yellow?style=flat-square)\n\n## Features\n\n✅ **CASL Integration** - Built on the battle-tested CASL library for ability management\n\n✅ **60+ Permission Actions** - Comprehensive set of actions from CRUD to complex operations\n\n✅ **Subject-Based Permissions** - Define permissions for specific entity types\n\n✅ **Field-Level Control** - Restrict access to specific fields within subjects\n\n✅ **User-Aware Permissions** - Set permissions dynamically based on user context\n\n✅ **Type-Safe** - Full TypeScript support with proper type definitions\n\n✅ **Container Integration** - Works seamlessly with dependency injection\n\n✅ **Framework Integration** - Integrates with Ooneex routing for route-level permissions\n\n## Installation\n\n```bash\nbun add @ooneex/permission\n```\n\n## Usage\n\n### Creating a Permission Class\n\n```typescript\nimport { Permission, EPermissionAction, EPermissionSubject } from '@ooneex/permission';\nimport type { IUser } from '@ooneex/user';\n\nclass UserPermission extends Permission {\n  private user: IUser | null = null;\n\n  public allow(): this {\n    // Define what actions are allowed\n    this.ability.can(EPermissionAction.READ, EPermissionSubject.USER);\n    this.ability.can(EPermissionAction.VIEW, EPermissionSubject.USER);\n    return this;\n  }\n\n  public forbid(): this {\n    // Define what actions are forbidden\n    this.ability.cannot(EPermissionAction.DELETE, EPermissionSubject.USER);\n    return this;\n  }\n\n  public setUserPermissions(user: IUser | null): this {\n    this.user = user;\n    \n    if (user) {\n      // Authenticated users can update their own profile\n      this.ability.can(EPermissionAction.UPDATE, EPermissionSubject.USER);\n    }\n    \n    return this;\n  }\n\n  public async check(): Promise<boolean> {\n    return this.user !== null;\n  }\n}\n```\n\n### Using Permissions\n\n```typescript\nimport { UserPermission } from './permissions/UserPermission';\nimport { EPermissionAction, EPermissionSubject } from '@ooneex/permission';\n\nconst permission = new UserPermission();\n\n// Set up permissions for a user\npermission\n  .setUserPermissions(currentUser)\n  .allow()\n  .forbid()\n  .build();\n\n// Check if action is allowed\nif (permission.can(EPermissionAction.UPDATE, EPermissionSubject.USER)) {\n  console.log('User can update');\n}\n\n// Check if action is forbidden\nif (permission.cannot(EPermissionAction.DELETE, EPermissionSubject.USER)) {\n  console.log('User cannot delete');\n}\n```\n\n### Route-Level Permissions\n\n```typescript\nimport { Route } from '@ooneex/routing';\nimport type { IController, ContextType } from '@ooneex/controller';\nimport { UserPermission } from './permissions/UserPermission';\n\n@Route.http({\n  name: 'api.users.update',\n  path: '/api/users/:id',\n  method: 'PUT',\n  description: 'Update user profile',\n  permission: UserPermission\n})\nclass UserUpdateController implements IController {\n  public async index(context: ContextType): Promise<IResponse> {\n    // Permission is automatically checked before reaching this handler\n    const { id } = context.params;\n    const user = await this.userService.update(id, context.payload);\n    \n    return context.response.json({ user });\n  }\n}\n```\n\n### Field-Level Permissions\n\n```typescript\nimport { Permission, EPermissionAction, EPermissionSubject } from '@ooneex/permission';\nimport type { IUser } from '@ooneex/user';\n\nclass UserFieldPermission extends Permission {\n  public allow(): this {\n    // Allow reading only specific fields\n    this.ability.can(EPermissionAction.READ, EPermissionSubject.USER, 'name');\n    this.ability.can(EPermissionAction.READ, EPermissionSubject.USER, 'email');\n    return this;\n  }\n\n  public forbid(): this {\n    // Forbid reading sensitive fields\n    this.ability.cannot(EPermissionAction.READ, EPermissionSubject.USER, 'password');\n    this.ability.cannot(EPermissionAction.READ, EPermissionSubject.USER, 'secretKey');\n    return this;\n  }\n\n  public setUserPermissions(user: IUser | null): this {\n    return this;\n  }\n\n  public async check(): Promise<boolean> {\n    return true;\n  }\n}\n\n// Usage\nconst permission = new UserFieldPermission();\npermission.allow().forbid().build();\n\npermission.can(EPermissionAction.READ, EPermissionSubject.USER, 'name');     // true\npermission.can(EPermissionAction.READ, EPermissionSubject.USER, 'password'); // false\n```\n\n### Custom Subjects\n\n```typescript\nimport { Permission, EPermissionAction } from '@ooneex/permission';\nimport type { IUser } from '@ooneex/user';\n\n// Define custom subjects for your domain\ntype CustomSubjects = 'Article' | 'Comment' | 'Category';\n\nclass ArticlePermission extends Permission<CustomSubjects> {\n  public allow(): this {\n    this.ability.can(EPermissionAction.READ, 'Article');\n    this.ability.can(EPermissionAction.CREATE, 'Article');\n    return this;\n  }\n\n  public forbid(): this {\n    this.ability.cannot(EPermissionAction.DELETE, 'Article');\n    return this;\n  }\n\n  public setUserPermissions(user: IUser | null): this {\n    if (user) {\n      this.ability.can(EPermissionAction.UPDATE, 'Article');\n    }\n    return this;\n  }\n\n  public async check(): Promise<boolean> {\n    return true;\n  }\n}\n```\n\n## API Reference\n\n### Classes\n\n#### `Permission<S>`\n\nAbstract base class for creating permission implementations.\n\n**Type Parameter:**\n- `S` - Additional subject types (optional)\n\n**Constructor:**\n```typescript\nnew Permission()\n```\n\n**Abstract Methods:**\n\n##### `allow(): this`\n\nDefine allowed actions for subjects.\n\n**Returns:** Self for chaining\n\n##### `forbid(): this`\n\nDefine forbidden actions for subjects.\n\n**Returns:** Self for chaining\n\n##### `setUserPermissions(user: IUser | null): this`\n\nSet permissions based on the current user context.\n\n**Parameters:**\n- `user` - The current user or null for guests\n\n**Returns:** Self for chaining\n\n##### `check(): Promise<boolean>`\n\nPerform custom permission validation logic.\n\n**Returns:** Promise resolving to true if permission check passes\n\n**Concrete Methods:**\n\n##### `build(): this`\n\nBuild the ability after defining permissions. Must be called before using `can` or `cannot`.\n\n**Returns:** Self for chaining\n\n**Throws:** None, but `can`/`cannot` will throw if not called\n\n##### `can(action: PermissionActionType, subject: Subjects | S, field?: string): boolean`\n\nCheck if an action is allowed on a subject.\n\n**Parameters:**\n- `action` - The action to check\n- `subject` - The subject to check against\n- `field` - Optional field name for field-level permissions\n\n**Returns:** `true` if action is allowed\n\n**Throws:** `PermissionException` if `build()` was not called\n\n##### `cannot(action: PermissionActionType, subject: Subjects | S, field?: string): boolean`\n\nCheck if an action is forbidden on a subject.\n\n**Parameters:**\n- `action` - The action to check\n- `subject` - The subject to check against\n- `field` - Optional field name for field-level permissions\n\n**Returns:** `true` if action is forbidden\n\n**Throws:** `PermissionException` if `build()` was not called\n\n### Enums\n\n#### `EPermissionAction`\n\nComprehensive enum of permission actions.\n\n**CRUD Operations:**\n| Action | Value | Description |\n|--------|-------|-------------|\n| `CREATE` | `create` | Create new resources |\n| `READ` | `read` | Read/view resources |\n| `UPDATE` | `update` | Update existing resources |\n| `DELETE` | `delete` | Delete resources |\n| `MANAGE` | `manage` | Full management (all actions) |\n\n**Content Operations:**\n| Action | Value | Description |\n|--------|-------|-------------|\n| `VIEW` | `view` | View content |\n| `EDIT` | `edit` | Edit content |\n| `PUBLISH` | `publish` | Publish content |\n| `ARCHIVE` | `archive` | Archive content |\n| `APPROVE` | `approve` | Approve content |\n| `REJECT` | `reject` | Reject content |\n\n**File Operations:**\n| Action | Value | Description |\n|--------|-------|-------------|\n| `DOWNLOAD` | `download` | Download files |\n| `UPLOAD` | `upload` | Upload files |\n| `COPY` | `copy` | Copy resources |\n| `MOVE` | `move` | Move resources |\n| `EXPORT` | `export` | Export data |\n| `IMPORT` | `import` | Import data |\n\n**Social Operations:**\n| Action | Value | Description |\n|--------|-------|-------------|\n| `SHARE` | `share` | Share resources |\n| `COMMENT` | `comment` | Add comments |\n| `RATE` | `rate` | Rate content |\n| `LIKE` | `like` | Like content |\n| `DISLIKE` | `dislike` | Dislike content |\n| `FOLLOW` | `follow` | Follow users/content |\n| `UNFOLLOW` | `unfollow` | Unfollow |\n| `SUBSCRIBE` | `subscribe` | Subscribe |\n| `UNSUBSCRIBE` | `unsubscribe` | Unsubscribe |\n| `BOOKMARK` | `bookmark` | Bookmark content |\n\n**User Management:**\n| Action | Value | Description |\n|--------|-------|-------------|\n| `INVITE` | `invite` | Invite users |\n| `ASSIGN` | `assign` | Assign resources |\n| `UNASSIGN` | `unassign` | Unassign resources |\n| `GRANT` | `grant` | Grant permissions |\n| `DENY` | `deny` | Deny permissions |\n| `REVOKE` | `revoke` | Revoke access |\n\n**Moderation:**\n| Action | Value | Description |\n|--------|-------|-------------|\n| `BLOCK` | `block` | Block users |\n| `UNBLOCK` | `unblock` | Unblock users |\n| `REPORT` | `report` | Report content |\n| `MODERATE` | `moderate` | Moderate content |\n| `BAN` | `ban` | Ban users |\n| `UNBAN` | `unban` | Unban users |\n\n**System Operations:**\n| Action | Value | Description |\n|--------|-------|-------------|\n| `EXECUTE` | `execute` | Execute operations |\n| `RESTORE` | `restore` | Restore deleted |\n| `PURGE` | `purge` | Permanently delete |\n| `BACKUP` | `backup` | Backup data |\n| `SYNC` | `sync` | Synchronize data |\n| `CONFIGURE` | `configure` | Configure settings |\n| `MONITOR` | `monitor` | Monitor system |\n| `AUDIT` | `audit` | Audit actions |\n\n**Additional Operations:**\n| Action | Value | Description |\n|--------|-------|-------------|\n| `SEARCH` | `search` | Search resources |\n| `FILTER` | `filter` | Filter resources |\n| `SORT` | `sort` | Sort resources |\n| `TAG` | `tag` | Tag resources |\n| `UNTAG` | `untag` | Remove tags |\n| `LOCK` | `lock` | Lock resources |\n| `UNLOCK` | `unlock` | Unlock resources |\n| `CLONE` | `clone` | Clone resources |\n| `FORK` | `fork` | Fork resources |\n| `MERGE` | `merge` | Merge resources |\n| `SPLIT` | `split` | Split resources |\n| `VALIDATE` | `validate` | Validate data |\n| `VERIFY` | `verify` | Verify data |\n| `CANCEL` | `cancel` | Cancel operations |\n| `PAUSE` | `pause` | Pause operations |\n| `RESUME` | `resume` | Resume operations |\n| `SCHEDULE` | `schedule` | Schedule operations |\n| `UNSCHEDULE` | `unschedule` | Unschedule |\n| `JOIN` | `join` | Join groups |\n| `HIDE` | `hide` | Hide content |\n\n#### `EPermissionSubject`\n\nEnum of common permission subjects.\n\n| Subject | Value | Description |\n|---------|-------|-------------|\n| `USER_ENTITY` | `UserEntity` | User database entity |\n| `AUTH_USER_ENTITY` | `AuthUserEntity` | Auth user entity |\n| `AUTH_USER` | `AuthUser` | Authenticated user |\n| `SYSTEM_ENTITY` | `SystemEntity` | System entity |\n| `SYSTEM` | `System` | System subject |\n| `USER` | `User` | User subject |\n| `ALL` | `all` | All subjects (wildcard) |\n\n### Types\n\n#### `PermissionActionType`\n\nString literal type for permission actions.\n\n```typescript\ntype PermissionActionType = `${EPermissionAction}`;\n// \"create\" | \"read\" | \"update\" | \"delete\" | \"manage\" | ...\n```\n\n#### `Subjects`\n\nString literal type for permission subjects.\n\n```typescript\ntype Subjects = `${EPermissionSubject}`;\n// \"UserEntity\" | \"AuthUserEntity\" | \"User\" | \"System\" | \"all\" | ...\n```\n\n#### `PermissionClassType`\n\nType for permission class constructors.\n\n```typescript\ntype PermissionClassType = new (...args: any[]) => IPermission;\n```\n\n### Interfaces\n\n#### `IPermission<S>`\n\nInterface for permission implementations.\n\n```typescript\ninterface IPermission<S extends string = string> {\n  allow: () => IPermission<S>;\n  forbid: () => IPermission<S>;\n  setUserPermissions: (user: IUser | null) => IPermission<S>;\n  check: () => Promise<boolean>;\n  build: () => IPermission<S>;\n  can: (action: PermissionActionType, subject: Subjects | S, field?: string) => boolean;\n  cannot: (action: PermissionActionType, subject: Subjects | S, field?: string) => boolean;\n}\n```\n\n### Exceptions\n\n#### `PermissionException`\n\nThrown when permission operations fail.\n\n```typescript\nimport { Permission, PermissionException } from '@ooneex/permission';\n\ntry {\n  const permission = new MyPermission();\n  // Forgot to call build()\n  permission.can('read', 'User');\n} catch (error) {\n  if (error instanceof PermissionException) {\n    console.error('Permission error:', error.message);\n  }\n}\n```\n\n### Decorators\n\n#### `@decorator.permission()`\n\nDecorator to register permission classes with the DI container.\n\n```typescript\nimport { Permission, decorator } from '@ooneex/permission';\n\n@decorator.permission()\nclass ArticlePermission extends Permission {\n  // Implementation\n}\n```\n\n## Advanced Usage\n\n### Role-Based Permission\n\n```typescript\nimport { Permission, EPermissionAction } from '@ooneex/permission';\nimport { ERole } from '@ooneex/role';\nimport type { IUser } from '@ooneex/user';\n\nclass AdminPermission extends Permission {\n  private user: IUser | null = null;\n\n  public allow(): this {\n    return this;\n  }\n\n  public forbid(): this {\n    return this;\n  }\n\n  public setUserPermissions(user: IUser | null): this {\n    this.user = user;\n    \n    if (!user) return this;\n\n    // Set permissions based on role\n    switch (user.role) {\n      case 'ROLE_SUPER_ADMIN':\n        this.ability.can(EPermissionAction.MANAGE, 'all');\n        break;\n      \n      case 'ROLE_ADMIN':\n        this.ability.can(EPermissionAction.CREATE, 'User');\n        this.ability.can(EPermissionAction.READ, 'User');\n        this.ability.can(EPermissionAction.UPDATE, 'User');\n        this.ability.cannot(EPermissionAction.DELETE, 'User');\n        break;\n      \n      case 'ROLE_MODERATOR':\n        this.ability.can(EPermissionAction.READ, 'User');\n        this.ability.can(EPermissionAction.MODERATE, 'User');\n        this.ability.can(EPermissionAction.BAN, 'User');\n        break;\n      \n      default:\n        this.ability.can(EPermissionAction.READ, 'User');\n    }\n    \n    return this;\n  }\n\n  public async check(): Promise<boolean> {\n    return this.user !== null;\n  }\n}\n```\n\n### Ownership-Based Permissions\n\n```typescript\nimport { Permission, EPermissionAction } from '@ooneex/permission';\nimport type { IUser } from '@ooneex/user';\n\nclass ArticleOwnerPermission extends Permission<'Article'> {\n  private user: IUser | null = null;\n  private articleOwnerId: string | null = null;\n\n  public setArticleOwner(ownerId: string): this {\n    this.articleOwnerId = ownerId;\n    return this;\n  }\n\n  public allow(): this {\n    this.ability.can(EPermissionAction.READ, 'Article');\n    return this;\n  }\n\n  public forbid(): this {\n    return this;\n  }\n\n  public setUserPermissions(user: IUser | null): this {\n    this.user = user;\n    \n    if (user && this.articleOwnerId === user.id) {\n      // Owner can do everything with their article\n      this.ability.can(EPermissionAction.UPDATE, 'Article');\n      this.ability.can(EPermissionAction.DELETE, 'Article');\n      this.ability.can(EPermissionAction.PUBLISH, 'Article');\n    }\n    \n    return this;\n  }\n\n  public async check(): Promise<boolean> {\n    return this.user !== null && this.articleOwnerId !== null;\n  }\n}\n\n// Usage\nconst permission = new ArticleOwnerPermission();\npermission\n  .setArticleOwner(article.userId)\n  .setUserPermissions(currentUser)\n  .allow()\n  .build();\n\nif (permission.can(EPermissionAction.DELETE, 'Article')) {\n  await articleService.delete(articleId);\n}\n```\n\n### Permission Factory\n\n```typescript\nimport { Permission, EPermissionAction, type PermissionClassType } from '@ooneex/permission';\nimport { container } from '@ooneex/container';\n\nfunction createPermissionFor(resource: string): PermissionClassType {\n  return class extends Permission {\n    public allow(): this {\n      this.ability.can(EPermissionAction.READ, resource);\n      return this;\n    }\n\n    public forbid(): this {\n      return this;\n    }\n\n    public setUserPermissions(user: IUser | null): this {\n      if (user) {\n        this.ability.can(EPermissionAction.CREATE, resource);\n        this.ability.can(EPermissionAction.UPDATE, resource);\n      }\n      return this;\n    }\n\n    public async check(): Promise<boolean> {\n      return true;\n    }\n  };\n}\n\n// Create permissions dynamically\nconst ArticlePermission = createPermissionFor('Article');\nconst CommentPermission = createPermissionFor('Comment');\nconst CategoryPermission = createPermissionFor('Category');\n```\n\n### Controller with Permission Check\n\n```typescript\nimport { Route } from '@ooneex/routing';\nimport { EPermissionAction } from '@ooneex/permission';\nimport type { IController, ContextType } from '@ooneex/controller';\nimport { ArticlePermission } from './permissions/ArticlePermission';\n\n@Route.http({\n  name: 'api.articles.delete',\n  path: '/api/articles/:id',\n  method: 'DELETE',\n  description: 'Delete an article',\n  permission: ArticlePermission\n})\nclass ArticleDeleteController implements IController {\n  public async index(context: ContextType): Promise<IResponse> {\n    const { id } = context.params;\n    const article = await this.articleService.findById(id);\n\n    // Additional ownership check\n    const permission = new ArticlePermission();\n    permission\n      .setArticleOwner(article.userId)\n      .setUserPermissions(context.user)\n      .allow()\n      .forbid()\n      .build();\n\n    if (permission.cannot(EPermissionAction.DELETE, 'Article')) {\n      return context.response.exception('Not authorized to delete this article', {\n        status: 403\n      });\n    }\n\n    await this.articleService.delete(id);\n    \n    return context.response.json({ deleted: true });\n  }\n}\n```\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](./LICENSE) file for details.\n\n## Contributing\n\nContributions are welcome! Please feel free to submit a Pull Request. For major changes, please open an issue first to discuss what you would like to change.\n\n### Development Setup\n\n1. Clone the repository\n2. Install dependencies: `bun install`\n3. Run tests: `bun run test`\n4. Build the project: `bun run build`\n\n### Guidelines\n\n- Write tests for new features\n- Follow the existing code style\n- Update documentation for API changes\n- Ensure all tests pass before submitting PR\n\n---\n\nMade with ❤️ by the Ooneex team\n","readmeFilename":"README.md"}