{"_id":"@bune/casl-authorization","_rev":"7-1de642e492d7a59a9cc91e0a3e5651e0","name":"@bune/casl-authorization","dist-tags":{"latest":"0.0.7"},"versions":{"1.0.0":{"name":"@bune/casl-authorization","version":"1.0.0","author":{"name":"devhoangkien"},"license":"MIT","_id":"@bune/casl-authorization@1.0.0","maintainers":[{"name":"devhoangkien","email":"devhoangkien@gmail.com"}],"dist":{"shasum":"2aa22ef692e34a17135ed8ea8e92511e010e3783","tarball":"https://registry.npmjs.org/@bune/casl-authorization/-/casl-authorization-1.0.0.tgz","fileCount":11,"integrity":"sha512-GUa6L1Talv/X7afQIIod4jx3+M9milJ3ziE+cnV9R8y9PPZR1Q0U42ZmnI1+QIj3Oy9FQFZInfhjd1B3dJR44Q==","signatures":[{"sig":"MEYCIQCs/44EMFJBQcj2TztF3IPrAe0ELiUZBEXbOhnJARx09AIhAOf8RWX0MgQXBhe1Evzj0fUzsFV+hbBiOQ5J5ka6jtLZ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20697},"main":"src/index.ts","type":"module","module":"src/index.ts","gitHead":"86b3d684e306a1e071ad84a02a495ddedc820f6e","_npmUser":{"name":"devhoangkien","email":"devhoangkien@gmail.com"},"_npmVersion":"10.8.2","description":"CASL Authorization package for NestJS microservices","directories":{},"_nodeVersion":"20.18.1","dependencies":{"@nestjs/core":"^11.0.1","@casl/ability":"^6.5.0","@nestjs/common":"^11.0.1","@nestjs/graphql":"^13.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/casl-authorization_1.0.0_1739595194012_0.12660851366564208","host":"s3://npm-registry-packages-npm-production"}},"0.0.1":{"name":"@bune/casl-authorization","version":"0.0.1","author":{"name":"devhoangkien"},"license":"MIT","_id":"@bune/casl-authorization@0.0.1","maintainers":[{"name":"devhoangkien","email":"devhoangkien@gmail.com"}],"dist":{"shasum":"588e217fbcd1021a065b8db5642a98699b7e8f3a","tarball":"https://registry.npmjs.org/@bune/casl-authorization/-/casl-authorization-0.0.1.tgz","fileCount":11,"integrity":"sha512-peZeoacftI6QX3+BuLZCFKw3pTU6r3Pq/lu1l2NXGIpYTsMEXuEnFzKo5MuXWoaSOHoa3ZTPPTdBEx5VAJRt6Q==","signatures":[{"sig":"MEUCIQDhcXdbugSxj4APbZvUajk9DOxQRHgJ9rzlk5o8+OxuNgIgXFzIkPeAqeR8gX1GYBljRzCMA4wnJfhek4x2dx1+4TU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":20697},"main":"src/index.ts","type":"module","module":"src/index.ts","gitHead":"86b3d684e306a1e071ad84a02a495ddedc820f6e","_npmUser":{"name":"devhoangkien","email":"devhoangkien@gmail.com"},"_npmVersion":"10.8.2","description":"CASL Authorization package for NestJS microservices","directories":{},"_nodeVersion":"20.18.1","dependencies":{"@nestjs/core":"^11.0.1","@casl/ability":"^6.5.0","@nestjs/common":"^11.0.1","@nestjs/graphql":"^13.0.2"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/casl-authorization_0.0.1_1739595245122_0.2631213445088454","host":"s3://npm-registry-packages-npm-production"}},"0.0.2":{"name":"@bune/casl-authorization","version":"0.0.2","author":{"name":"devhoangkien"},"license":"MIT","_id":"@bune/casl-authorization@0.0.2","maintainers":[{"name":"devhoangkien","email":"devhoangkien@gmail.com"}],"dist":{"shasum":"1e76b0959fdec0ee431f2cdad0575ab65dfa1027","tarball":"https://registry.npmjs.org/@bune/casl-authorization/-/casl-authorization-0.0.2.tgz","fileCount":33,"integrity":"sha512-8o+AhbGzb2WUTPm6LY7/7ffMMtkKkcYv6Md9rWISpBp72HtNWsrr/JBCqoRpIWvcv0SDHotv3u8rqpq05XpIMw==","signatures":[{"sig":"MEYCIQDRpE+rzFrvzbQtcXe5IEC8JWELVS6lTRM87Ui8d/lHawIhAPhsRtVgPhn0IA9K20iNZW56WPTB46NMD6BZogh4cJq4","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47341},"main":"dist/lib/index","types":"dist/lib/index.d.ts","gitHead":"86b3d684e306a1e071ad84a02a495ddedc820f6e","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"devhoangkien","email":"devhoangkien@gmail.com"},"_npmVersion":"10.8.2","description":"CASL Authorization package for NestJS microservices","directories":{},"_nodeVersion":"20.18.1","dependencies":{"@nestjs/core":"^11.0.1","@casl/ability":"^6.5.0","@nestjs/common":"^11.0.1","@nestjs/graphql":"^13.0.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/casl-authorization_0.0.2_1739620332518_0.30321646918359213","host":"s3://npm-registry-packages-npm-production"}},"0.0.3":{"name":"@bune/casl-authorization","version":"0.0.3","author":{"name":"devhoangkien"},"license":"MIT","_id":"@bune/casl-authorization@0.0.3","maintainers":[{"name":"devhoangkien","email":"devhoangkien@gmail.com"}],"dist":{"shasum":"48ca5a92c4398f690b1c3f9ec871c334c8e49d9c","tarball":"https://registry.npmjs.org/@bune/casl-authorization/-/casl-authorization-0.0.3.tgz","fileCount":33,"integrity":"sha512-6DWmQQn8Zrc7GemlfY2fMOVI21xkUuUWjv+MFFxD228Z/B1PeMHv25kcBEfb8yVb9Nf3R2XtI64J8IXpCLnN7g==","signatures":[{"sig":"MEQCIFv/qPOFejQ+gFKyArPv4HIL3r4Z/Y47xVMFpd63Cr0uAiBJrcbVqQXU0lXkKjBeGHliJyCJRa21YVmCkb7o17hSBA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":47333},"main":"dist/index","types":"dist/index.d.ts","gitHead":"86b3d684e306a1e071ad84a02a495ddedc820f6e","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"devhoangkien","email":"devhoangkien@gmail.com"},"_npmVersion":"10.8.2","description":"CASL Authorization package for NestJS microservices","directories":{},"_nodeVersion":"20.18.1","dependencies":{"@nestjs/core":"^11.0.1","@casl/ability":"^6.5.0","@nestjs/common":"^11.0.1","@nestjs/graphql":"^13.0.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/casl-authorization_0.0.3_1739620545925_0.895466444379384","host":"s3://npm-registry-packages-npm-production"}},"0.0.4":{"name":"@bune/casl-authorization","version":"0.0.4","author":{"name":"devhoangkien"},"license":"MIT","_id":"@bune/casl-authorization@0.0.4","maintainers":[{"name":"devhoangkien","email":"devhoangkien@gmail.com"}],"dist":{"shasum":"14b88e36c69ee89d4e57de1d1bd000840277d1db","tarball":"https://registry.npmjs.org/@bune/casl-authorization/-/casl-authorization-0.0.4.tgz","fileCount":28,"integrity":"sha512-RtpKaMiWzhh7pe1k+cHo1Bn2lF0kl4Dc/9qOYpOZNbDxlqGR7zxD0AMGhdXXgkchxAt49+j/sUjSFf0WQvDl0A==","signatures":[{"sig":"MEQCIHVJAqPjFabJfxWmrUB31QssOpFf9AEYY1sQJSkDfGo4AiAQ/j/E1s4sxU3x4pq2eP1hF9rswKwudwwo5+RAokQVVA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42364},"main":"dist/index","types":"dist/index.d.ts","gitHead":"86b3d684e306a1e071ad84a02a495ddedc820f6e","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"devhoangkien","email":"devhoangkien@gmail.com"},"_npmVersion":"10.8.2","description":"CASL Authorization package for NestJS microservices","directories":{},"_nodeVersion":"20.18.1","dependencies":{"@nestjs/core":"^11.0.1","@casl/ability":"^6.5.0","@nestjs/common":"^11.0.1","@nestjs/graphql":"^13.0.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/casl-authorization_0.0.4_1739620907019_0.7197814539101091","host":"s3://npm-registry-packages-npm-production"}},"0.0.5":{"name":"@bune/casl-authorization","version":"0.0.5","author":{"name":"devhoangkien"},"license":"MIT","_id":"@bune/casl-authorization@0.0.5","maintainers":[{"name":"devhoangkien","email":"devhoangkien@gmail.com"}],"dist":{"shasum":"38c146e038d2389b90cc8dca1ab1522a1d000c27","tarball":"https://registry.npmjs.org/@bune/casl-authorization/-/casl-authorization-0.0.5.tgz","fileCount":28,"integrity":"sha512-r7BzOp3LUxoBI4MmWY5hW3Lxe4w0wsVf6eVJ2Z5k6fKh5dIx2pm7vgcQ8u9Zy09dO+tlTTEmRjyRH1//H/H2Hw==","signatures":[{"sig":"MEQCID8978993awYcD3xtITh1W5tYDBBfL9zniIx0gmwRIW4AiBofpUdzq+CNgE9LOUibcHuSP7pmh0dd6tRdIm8uGQH+Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44688},"main":"dist/index","types":"dist/index.d.ts","gitHead":"86b3d684e306a1e071ad84a02a495ddedc820f6e","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"devhoangkien","email":"devhoangkien@gmail.com"},"_npmVersion":"10.8.2","description":"CASL Authorization package for NestJS microservices","directories":{},"_nodeVersion":"20.18.1","dependencies":{"@nestjs/core":"^11.0.1","@casl/ability":"^6.5.0","@nestjs/common":"^11.0.1","@nestjs/graphql":"^13.0.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/casl-authorization_0.0.5_1739621226517_0.10177213788342154","host":"s3://npm-registry-packages-npm-production"}},"0.0.6":{"name":"@bune/casl-authorization","version":"0.0.6","author":{"name":"devhoangkien"},"license":"MIT","_id":"@bune/casl-authorization@0.0.6","maintainers":[{"name":"devhoangkien","email":"devhoangkien@gmail.com"}],"dist":{"shasum":"9b797bde3822f39246e2e97118ba9086ffc9bc74","tarball":"https://registry.npmjs.org/@bune/casl-authorization/-/casl-authorization-0.0.6.tgz","fileCount":35,"integrity":"sha512-XBmRq8LTUvlMZB7yc0nI7j/0zGag8tds9HWJPp9smJtWfLNvJEaGX0PnkooA2QYahbZ+zaV/UFk+KET8GwfP0g==","signatures":[{"sig":"MEUCIEP6EV3vy48xpd7zkv2EkSgqNlqkrrOqCrvvIimtYmc7AiEAn8sbf/NtZKjY8TRFjcQSL8yybMdvJQafY9kKLyESQhU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29417},"main":"dist/index","types":"dist/index.d.ts","gitHead":"86b3d684e306a1e071ad84a02a495ddedc820f6e","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"_npmUser":{"name":"devhoangkien","email":"devhoangkien@gmail.com"},"_npmVersion":"10.8.2","description":"CASL Authorization package for NestJS microservices","directories":{},"_nodeVersion":"20.18.1","dependencies":{"@nestjs/core":"^11.0.1","@casl/ability":"^6.5.0","@nestjs/common":"^11.0.1","@nestjs/graphql":"^13.0.2"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/casl-authorization_0.0.6_1739623961749_0.5927290632490423","host":"s3://npm-registry-packages-npm-production"}},"0.0.7":{"name":"@bune/casl-authorization","version":"0.0.7","description":"CASL Authorization package for NestJS microservices","main":"dist/index","types":"dist/index.d.ts","scripts":{"build":"tsc","prepublishOnly":"npm run build"},"dependencies":{"@casl/ability":"^6.5.0","@nestjs/common":"^11.0.1","@nestjs/core":"^11.0.1","@nestjs/graphql":"^13.0.2"},"devDependencies":{"typescript":"^5.0.0"},"author":{"name":"devhoangkien"},"license":"MIT","_id":"@bune/casl-authorization@0.0.7","gitHead":"86b3d684e306a1e071ad84a02a495ddedc820f6e","_nodeVersion":"20.18.1","_npmVersion":"10.8.2","dist":{"integrity":"sha512-L7CddPvOFNtHCMqi6TdIHREulL3dzF3u5MrhVq5aIUa8sE3g9yj5ZORbLNl5a4XkmG4Tmgw/zBnTwr1D3BNdYQ==","shasum":"172b74c918d99bb855a52006170026cc2d3ba812","tarball":"https://registry.npmjs.org/@bune/casl-authorization/-/casl-authorization-0.0.7.tgz","fileCount":35,"unpackedSize":29599,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDOoncTnLUG0DuxS9jctoWTz1Mh+vlVfgWUU0V+ZZD2fwIhAMZ30o/8+DDhO4I6/auDBL4nRWXxTqkm4Zk96Fk3uygZ"}]},"_npmUser":{"name":"devhoangkien","email":"devhoangkien@gmail.com"},"directories":{},"maintainers":[{"name":"devhoangkien","email":"devhoangkien@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/casl-authorization_0.0.7_1739624458309_0.9322434243719504"},"_hasShrinkwrap":false}},"time":{"created":"2025-02-15T04:53:13.934Z","modified":"2025-02-15T13:00:58.699Z","1.0.0":"2025-02-15T04:53:14.204Z","0.0.1":"2025-02-15T04:54:05.314Z","0.0.2":"2025-02-15T11:52:12.702Z","0.0.3":"2025-02-15T11:55:46.118Z","0.0.4":"2025-02-15T12:01:47.237Z","0.0.5":"2025-02-15T12:07:06.682Z","0.0.6":"2025-02-15T12:52:41.932Z","0.0.7":"2025-02-15T13:00:58.486Z"},"author":{"name":"devhoangkien"},"license":"MIT","description":"CASL Authorization package for NestJS microservices","maintainers":[{"name":"devhoangkien","email":"devhoangkien@gmail.com"}],"readme":"### @bune/casl-authorization\n\nA lightweight and flexible authorization package for NestJS using CASL (Content Access Security Layer). This package helps implement role-based access control (RBAC) and fine-grained permissions in GraphQL microservices.\n\n---\n\n## Installation  \n\n```bash\nnpm install @bune/casl-authorization\n```\n\n---\n\n## Usage  \n\n### 1️⃣ Define Permissions  \n\nCreate an `ability.factory.ts` file to define rules for different roles and permissions.  \n\n```typescript\nimport { Ability, AbilityBuilder, AbilityClass, ExtractSubjectType } from '@casl/ability';\n\nexport enum CaslActionEnum {\n  Manage = 'manage',\n  Read = 'read',\n  Create = 'create',\n  Update = 'update',\n  Delete = 'delete',\n}\n\nexport type Subjects = 'User' | 'Post' | 'Comment' | 'all';\n\nexport type AppAbility = Ability<[CaslActionEnum, Subjects]>;\n\nexport class AbilityFactory {\n  createForPermissions(permissions: { action: CaslActionEnum; subject: Subjects }[]): AppAbility {\n    const { can, build } = new AbilityBuilder<Ability<[CaslActionEnum, Subjects]>>(Ability as AbilityClass<AppAbility>);\n\n    permissions.forEach(({ action, subject }) => can(action, subject));\n\n    return build({\n      detectSubjectType: (item) => item as ExtractSubjectType<Subjects>,\n    });\n  }\n}\n```\n\n---\n\n### 2️⃣ Apply Guard in GraphQL Resolvers  \n\nUse `CaslGuard` to check permissions before executing a GraphQL query or mutation.  \n\n```typescript\nimport { Resolver, Query } from '@nestjs/graphql';\nimport { UseGuards } from '@nestjs/common';\nimport { CaslGuard } from '@bune/casl-authorization';\n\n@Resolver()\nexport class SampleResolver {\n  @Query(() => String)\n  @UseGuards(CaslGuard)\n  hello(): string {\n    return 'Hello, authorized user!';\n  }\n}\n```\n\n---\n\n### 3️⃣ Use Custom Decorator for Permission Checks  \n\nDefine a `@CheckPermissions()` decorator to apply permission rules dynamically.  \n\n```typescript\nimport { SetMetadata } from '@nestjs/common';\nimport { CaslActionEnum, Subjects } from './ability.factory';\n\nexport const CHECK_PERMISSIONS = 'check_permissions';\nexport const CheckPermissions = (action: CaslActionEnum, subject: Subjects) =>\n  SetMetadata(CHECK_PERMISSIONS, { action, subject });\n```\n\nThen apply it to a resolver method:  \n\n```typescript\n@Query(() => String)\n@CheckPermissions(CaslActionEnum.Read, 'User')\n@UseGuards(CaslGuard)\ngetUser(): string {\n  return 'Authorized user data';\n}\n```\n\n---\n\n## License  \n\n**MIT License**\n\n","readmeFilename":"README.md"}