diff --git a/CHANGELOG.md b/CHANGELOG.md index 88a3a248..343087d5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,8 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +### [0.0.2-next.7](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.6...v0.0.2-next.7) (2021-10-08) + ### [0.0.2-next.6](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.5...v0.0.2-next.6) (2021-10-08) ### [0.0.2-next.5](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.4...v0.0.2-next.5) (2021-10-08) diff --git a/docs/assets/js/search.json b/docs/assets/js/search.json index ab82c2cd..5d96f86a 100644 --- a/docs/assets/js/search.json +++ b/docs/assets/js/search.json @@ -1 +1 @@ -{"kinds":{"2":"Namespace","64":"Function","128":"Class","256":"Interface","512":"Constructor","1024":"Property","2048":"Method","65536":"Type literal","4194304":"Type alias","9999999":"Page"},"rows":[{"id":0,"kind":64,"name":"InjectAbility","url":"modules.html#InjectAbility","classes":"tsd-kind-function"},{"id":1,"kind":64,"name":"Policy","url":"modules.html#Policy","classes":"tsd-kind-function tsd-has-type-parameter"},{"id":2,"kind":2,"name":"Policy","url":"modules/Policy.html","classes":"tsd-kind-namespace"},{"id":3,"kind":64,"name":"usingGuard","url":"modules/Policy.html#usingGuard","classes":"tsd-kind-function tsd-parent-kind-namespace","parent":"Policy","pagesPluginParent":"Policy."},{"id":4,"kind":64,"name":"PoliciesMask","url":"modules.html#PoliciesMask","classes":"tsd-kind-function tsd-has-type-parameter"},{"id":5,"kind":2,"name":"PoliciesMask","url":"modules/PoliciesMask.html","classes":"tsd-kind-namespace"},{"id":6,"kind":64,"name":"usingGuard","url":"modules/PoliciesMask.html#usingGuard","classes":"tsd-kind-function tsd-parent-kind-namespace","parent":"PoliciesMask","pagesPluginParent":"PoliciesMask."},{"id":7,"kind":64,"name":"bindPolicyDecorators","url":"modules.html#bindPolicyDecorators","classes":"tsd-kind-function tsd-has-type-parameter"},{"id":8,"kind":4194304,"name":"BoundPolicyDecorators","url":"modules.html#BoundPolicyDecorators","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":9,"kind":65536,"name":"__type","url":"modules.html#BoundPolicyDecorators.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"BoundPolicyDecorators","pagesPluginParent":"BoundPolicyDecorators."},{"id":10,"kind":1024,"name":"Policy","url":"modules.html#BoundPolicyDecorators.__type.Policy","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"BoundPolicyDecorators.__type","pagesPluginParent":"BoundPolicyDecorators.__type."},{"id":11,"kind":1024,"name":"PoliciesMask","url":"modules.html#BoundPolicyDecorators.__type.PoliciesMask","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"BoundPolicyDecorators.__type","pagesPluginParent":"BoundPolicyDecorators.__type."},{"id":12,"kind":128,"name":"CaslModule","url":"classes/CaslModule.html","classes":"tsd-kind-class"},{"id":13,"kind":2048,"name":"withConfig","url":"classes/CaslModule.html#withConfig","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"CaslModule","pagesPluginParent":"CaslModule."},{"id":14,"kind":512,"name":"constructor","url":"classes/CaslModule.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"CaslModule","pagesPluginParent":"CaslModule."},{"id":15,"kind":256,"name":"ICaslRootConfig","url":"interfaces/ICaslRootConfig.html","classes":"tsd-kind-interface tsd-has-type-parameter"},{"id":16,"kind":1024,"name":"abilityFactory","url":"interfaces/ICaslRootConfig.html#abilityFactory","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ICaslRootConfig","pagesPluginParent":"ICaslRootConfig."},{"id":17,"kind":4194304,"name":"PolicyDescriptor","url":"modules.html#PolicyDescriptor","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":18,"kind":4194304,"name":"PolicyDescriptorMask","url":"modules.html#PolicyDescriptorMask","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":19,"kind":256,"name":"IPolicy","url":"interfaces/IPolicy.html","classes":"tsd-kind-interface tsd-has-type-parameter"},{"id":20,"kind":2048,"name":"handle","url":"interfaces/IPolicy.html#handle","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"IPolicy","pagesPluginParent":"IPolicy."},{"id":21,"kind":4194304,"name":"SimplePolicy","url":"modules.html#SimplePolicy","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":22,"kind":4194304,"name":"GuardsList","url":"modules.html#GuardsList","classes":"tsd-kind-type-alias"},{"id":23,"kind":256,"name":"CaslAbilityFactory","url":"interfaces/CaslAbilityFactory.html","classes":"tsd-kind-interface tsd-has-type-parameter"},{"id":24,"kind":2048,"name":"createFromRequest","url":"interfaces/CaslAbilityFactory.html#createFromRequest","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"CaslAbilityFactory","pagesPluginParent":"CaslAbilityFactory."},{"id":25,"kind":4194304,"name":"MaybeAsyncValue","url":"modules.html#MaybeAsyncValue","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":26,"kind":1,"name":"Getting started","url":"pages/Guides/getting-started.html","classes":"tsd-kind-page","pagesPluginContent":"> This module is compatible with `nestjs@^8.0.0`.\n\n# Setup & configuration\n\nFirst, install the module:\n\n```bash\nnpm install @scitizen/nest-casl\n```\n\nThen, declare a provider that generate a CASL Ability from the current request.\n\n{@codeblock test/basic-use.e2e-spec.ts#AbilityFactory | src/ability-factory.service.ts}\n\nImport the {@link CaslModule `CaslModule`} in your `AppModule`, and configure it to use your ability factory.\n\n{@codeblock test/basic-use.e2e-spec.ts#AppModule | src/app.module.ts}\n\nYou can now start using policy decorators ({@link Policy `Policy`} and {@link PoliciesMask `PoliciesMask`}) in your controllers !\n\n# Basic usage\n\nYou can protect all methods of your controller using the {@link Policy `Policy`} class decorator.\n\n{@codeblock test/basic-use.e2e-spec.ts#CatOwnerController | src/cat-owner.controller.ts}\n\nThis decorator can also be used to protect individual methods.\n\n{@codeblock test/basic-use.e2e-spec.ts#CatCareController | src/cat-care.controller.ts}\n\nIf you want to group various policies in the same decorator at the controller level, use the {@link PoliciesMask `PoliciesMask`} decorator.\n\n{@codeblock test/basic-use.e2e-spec.ts#CatController | src/cat.controller.ts}\n\nCheck the tests !\n\n{@codeblock folded test/basic-use.e2e-spec.ts#Test | test/cats.e2e-spec.ts}\n\n# What next ?\n\n{@page Use with guards}","pagesPluginParent":"Guides / "},{"id":27,"kind":1,"name":"Use with guards","url":"pages/Guides/use-with-guards.html","classes":"tsd-kind-page","pagesPluginContent":"Most of the times, you want to execute some guards before checking CASL policies, to extract some user informations before generating its abilities.\n\nThis page will show you the various way to do.\n\nLet's assume you have the following {@link CaslAbilityFactory `CaslAbilityFactory`}:\n\n{@codeblock test/use-with-guards/ability-factory.service.ts | src/ability-factory.service.ts}\n\n# The naïve approach\n\n> This method is **not recommanded**. You might skip directly to the [recommended approach](#the-recommended-approach)\n\n## Without any more dependencies\n\nThis method does not require any external dependency, and is as close to NestJS as possible.\n\n{@codeblock folded test/use-with-guards/naive.guard.ts | src/guards/naive.guard.ts}\n\nAssuming the guard does the following (see above for an example implementation):\n* Users without an `Authorization` header will see an `Unauthorized` exception.\n* Users with an invalid `Authorization` header will see a `Forbidden` exception.\n* Users with a valid `Authorization` header will be allowed to continue, and the property `user` is set on the `request`.\n\n> Yeah, I'm aware that in an ideal world, a [`Middleware`](https://docs.nestjs.com/middleware) or an [`Interceptor`](https://docs.nestjs.com/interceptors) should take care of setting the `user` property on the `Request`. But fact is that [`@nestjs/passport`](https://www.npmjs.com/package/@nestjs/passport) does it [in a guard](https://github.com/nestjs/passport/blob/6aef921c7566766d0eb9e79d2c8235177c539863/lib/auth.guard.ts#L58)\n\n{@codeblock test/use-with-guards/naive.controller.ts | src/controllers/naive.controller.ts}\n\nNow,\n* Users without an `Authorization` header will see an `Unauthorized` exception (from the `NaiveGuard`).\n* Users with an invalid `Authorization` header will see a `Forbidden` exception (from the `NaiveGuard`).\n* Users with an `Authorization` header that does not give them access to the ressource will see a `Forbidden` exception (from the {@link PoliciesGuard `PoliciesGuard`}).\n* Users with an `Authorization` header that give them access to the ressource will succeed.\n\n## Using [`@nestjs/passport`](https://www.npmjs.com/package/@nestjs/passport)\n\nIf you're using `passport`, you can delegate the user retrieval. Let's say you have a JWT `passport` strategy.\n\n{@codeblock folded test/use-with-guards/jwt-passport.strategy.ts | src/strategies/jwt-passport.strategy.ts}\n\nStill using the naive approach, you can then declare the controller like this:\n\n{@codeblock test/use-with-guards/passport-naive.controller.ts | src/controllers/passport-naive.controller.ts}\n\n## The tests\n\nWanna see the behavior as tests ? Here you are !\n\n{@codeblock folded test/use-with-guards/naive-test.e2e-spec.ts}\n\n# The recommended approach\n\nWhat's the problem about the naïve approach above ? Well, there are 2.\n1. *The readability*: The `UseGuards` decorator is placed **below** the {@link Policy `Policy`} decorator, but is ran **before** it.\n2. *The reusability*: If you're using multiple authentication strategies in the same app, you might have to apply guards **and** the policies on each method depending on the context. Moreover, if you want to type-check your policies, you might prefer to have abilities presets.\n\n## About readability\n\nYou can use {@link Policy.usingGuard `Policy.usingGuard`} or {@link PoliciesMask.usingGuard `PoliciesMask.usingGuard`} to prepended guards to the decorator factory. Those calls are cumulative, and you can do multiple subsequent calls to join guards using an `and` condition. If you provide an array of guards, they be evaluated using an `or` condition.\n\n{@codeblock test/use-with-guards/recommended.controller.ts#Recommended simple controller | src/controllers/recommended.controller.ts}\n\n## About reusability\n\nYou can even prepare a policy decorator with guards or {@link PolicyDescriptor `PolicyDescriptor`}:\n\n{@codeblock test/use-with-guards/recommended.controller.ts#Recommended bound | src/policies.ts}\n\nThen, use those presets in your controller:\n\n{@codeblock test/use-with-guards/recommended.controller.ts#Recommended bound controller | src/recommended-bound.controller.ts}\n\nNow, both `method1` and `method2` will run if\n* the user is authenticated through `jwt` strategy\n* it passes either `ExtraGuard1` or `ExtraGuard2`\n* and he has admin role.\n\n> Note that you can use {@link bindPolicyDecorators `bindPolicyDecorators`} to bind *both* {@link Policy `Policy`} and {@link PoliciesMask `PoliciesMask`}\n\n## The tests\n\nThis is tested, of course. Just see by yourself.\n\n{@codeblock folded test/use-with-guards/recommended-test.e2e-spec.ts}\n\n# What next ?\n\n{@page Better type constraints}","pagesPluginParent":"Guides / "},{"id":28,"kind":1,"name":"Better type constraints","url":"pages/Guides/better-type-constraints.html","classes":"tsd-kind-page","pagesPluginContent":"So far, we were able to configure your policies. But we can't yet check that our `action`s or `subject`s are actually matching what we declared.\n\n# Define the ability type\n\nLet's configure our ability types:\n\n{@codeblock test/better-types/ability.ts}\n\nUsing `MyAbility`, we can't pass anything to `can` or `cannot`: types are constrained.\n\n{@codeblock test/better-types/ability.typecheck.e2e-spec.ts}\n\nThat's great. This will greatly reduce our chances of typos. Moreover, your IDE might now suggest `action`s & `subject`s for you.\n\n# Use the ability type\n\n## With the {@link CaslAbilityFactory `CaslAbilityFactory`}\n\nLet's now use this type in your {@link CaslAbilityFactory `CaslAbilityFactory`}:\n\n{@codeblock test/better-types/ability-factory.service.ts | src/ability-factory.service.ts}\n\n## With decorators\n\nYou can pass your ability as a type parameter to your decorators to constraint your `action`s and `subject`s:\n\n{@codeblock test/better-types/test.controller.ts | src/test.controller.ts}\n\nBut the boring part here is that you have to pass your ability type to **every** decorator in order to constrain them. Hopefully, you can solve this:\n\n{@codeblock test/better-types/my-policies.ts | src/my-policies.ts}\n\nThen, simply enjoy type contraints !\n\n{@codeblock test/better-types/test-bound.controller.ts | src/test-bound.controller.ts}\n","pagesPluginParent":"Guides / "},{"id":29,"kind":1,"name":"Changelog","url":"pages/Changelog/CHANGELOG.html","classes":"tsd-kind-page","pagesPluginContent":"# Changelog\n\nAll notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.\n\n### [0.0.2-next.6](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.5...v0.0.2-next.6) (2021-10-08)\n\n### [0.0.2-next.5](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.4...v0.0.2-next.5) (2021-10-08)\n\n### [0.0.2-next.4](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.3...v0.0.2-next.4) (2021-10-07)\n\n### [0.0.2-next.3](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.2...v0.0.2-next.3) (2021-10-06)\n\n### [0.0.2-next.2](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.1...v0.0.2-next.2) (2021-10-06)\n\n\n### Features\n\n* **policies.guard:** allow async handlers ([9594542](https://github.com/Scitizen/nest-casl/commit/95945423b9d78ecb1353fe6c1a2228d5c9571cec))\n\n\n### Bug Fixes\n\n* add policy metadata in the correct order ([467354a](https://github.com/Scitizen/nest-casl/commit/467354a0434a6518f52697c7ab46642ed9384f8e))\n* **or.guard:** properly waterfall canActivate, stop further checks on first success, use promises ([f92f45e](https://github.com/Scitizen/nest-casl/commit/f92f45e023c36a7fdfebe01851315d839a2f5a9f))\n\n### [0.0.2-next.1](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.0...v0.0.2-next.1) (2021-10-06)\n\n### [0.0.2-next.0](https://github.com/Scitizen/nest-casl/compare/v0.0.1...v0.0.2-next.0) (2021-10-06)\n\n### [0.0.1](https://github.com/Scitizen/nest-casl/compare/78f16a2f9e103be41b9d6a872f547eb54bc0d80e...v0.0.1) (2021-10-06)\n\nInitial release\n","pagesPluginParent":"Changelog / "}],"index":{"version":"2.3.9","fields":["pagesPluginContent","name","parent"],"fieldVectors":[["pagesPluginContent/0",[]],["name/0",[0,32.165]],["parent/0",[]],["pagesPluginContent/1",[]],["name/1",[1,15.072]],["parent/1",[]],["pagesPluginContent/2",[]],["name/2",[1,15.072]],["parent/2",[]],["pagesPluginContent/3",[]],["name/3",[2,26.74]],["parent/3",[1,0.78]],["pagesPluginContent/4",[]],["name/4",[3,16.591]],["parent/4",[]],["pagesPluginContent/5",[]],["name/5",[3,16.591]],["parent/5",[]],["pagesPluginContent/6",[]],["name/6",[2,26.74]],["parent/6",[3,0.859]],["pagesPluginContent/7",[]],["name/7",[4,26.74]],["parent/7",[]],["pagesPluginContent/8",[]],["name/8",[5,26.74]],["parent/8",[]],["pagesPluginContent/9",[]],["name/9",[6,32.165]],["parent/9",[5,1.385]],["pagesPluginContent/10",[]],["name/10",[1,15.072]],["parent/10",[7,1.385]],["pagesPluginContent/11",[]],["name/11",[3,16.591]],["parent/11",[7,1.385]],["pagesPluginContent/12",[]],["name/12",[8,20.497]],["parent/12",[]],["pagesPluginContent/13",[]],["name/13",[9,32.165]],["parent/13",[8,1.061]],["pagesPluginContent/14",[]],["name/14",[10,32.165]],["parent/14",[8,1.061]],["pagesPluginContent/15",[]],["name/15",[11,26.74]],["parent/15",[]],["pagesPluginContent/16",[]],["name/16",[12,32.165]],["parent/16",[11,1.385]],["pagesPluginContent/17",[]],["name/17",[13,26.74]],["parent/17",[]],["pagesPluginContent/18",[]],["name/18",[14,32.165]],["parent/18",[]],["pagesPluginContent/19",[]],["name/19",[15,26.74]],["parent/19",[]],["pagesPluginContent/20",[]],["name/20",[16,32.165]],["parent/20",[15,1.385]],["pagesPluginContent/21",[]],["name/21",[17,32.165]],["parent/21",[]],["pagesPluginContent/22",[]],["name/22",[18,32.165]],["parent/22",[]],["pagesPluginContent/23",[]],["name/23",[19,20.497]],["parent/23",[]],["pagesPluginContent/24",[]],["name/24",[20,32.165]],["parent/24",[19,1.061]],["pagesPluginContent/25",[]],["name/25",[21,32.165]],["parent/25",[]],["pagesPluginContent/26",[1,24.396,3,23.984,8,19.306,22,48.746,23,19.306,24,30.296,25,12.859,26,17.854,27,19.306,28,17.854,29,17.854,30,17.854,31,14.842,32,30.296,33,40.443,34,17.854,35,17.854,36,17.854,37,25.186,38,12.859,39,14.842,40,21.82,41,17.854,42,12.859,43,17.854,44,25.186,45,14.842,46,17.854,47,14.842,48,40.752,49,56.583,50,56.583,51,17.854,52,12.859,53,12.859,54,17.854,55,37.499,56,25.147,57,33.488,58,17.854,59,21.82,60,14.842,61,14.842,62,25.147,63,22.532,64,14.842,65,17.854,66,17.854,67,28.422,68,28.422,69,12.859,70,17.854,71,21.82,72,14.842,73,17.854,74,17.854,75,17.854,76,30.296,77,14.842,78,30.296,79,12.859,80,25.186,81,17.854,82,33.488,83,17.854,84,30.296,85,17.854,86,17.854,87,12.859,88,17.854,89,17.854,90,17.854,91,17.854,92,14.842,93,14.842,94,17.854,95,14.842,96,12.859,97,14.842,98,17.854,99,17.854,100,17.854,101,17.854,102,12.859,103,14.842,104,14.842,105,17.854,106,17.854,107,12.859,108,12.859,109,14.842,110,14.842,111,12.859]],["name/26",[112,23.437,113,23.437]],["parent/26",[]],["pagesPluginContent/27",[1,11.554,3,5.971,4,9.624,13,9.624,19,7.377,22,43.952,23,15.713,25,24.75,27,32.591,33,43.952,37,5.108,38,8.338,39,5.108,40,24.75,42,17.759,45,13.645,47,9.624,48,28.489,52,4.425,53,8.338,55,26.696,56,13.222,57,8.338,59,24.75,61,13.645,62,31.563,63,9.372,64,5.108,67,36.835,68,20.308,69,8.338,71,20.308,79,14.944,80,17.25,82,14.944,87,8.338,92,20.498,93,9.624,95,5.108,96,11.822,97,5.108,102,4.425,103,13.645,104,17.25,107,8.338,108,4.425,109,5.108,110,9.624,111,20.308,114,6.144,115,6.144,116,6.144,117,11.576,118,16.414,119,6.144,120,6.144,121,24.657,122,6.144,123,6.144,124,6.144,125,11.576,126,26.696,127,6.144,128,6.144,129,11.576,130,9.624,131,6.144,132,17.25,133,11.576,134,39.555,135,6.144,136,11.576,137,24.657,138,16.414,139,16.414,140,6.144,141,13.645,142,6.144,143,6.144,144,16.414,145,6.144,146,16.414,147,11.576,148,6.144,149,6.144,150,20.749,151,6.144,152,6.144,153,6.144,154,13.645,155,6.144,156,6.144,157,6.144,158,6.144,159,6.144,160,6.144,161,6.144,162,28.568,163,11.576,164,4.425,165,47.808,166,6.144,167,6.144,168,31.419,169,31.419,170,31.419,171,11.576,172,24.657,173,11.576,174,16.414,175,6.144,176,6.144,177,6.144,178,11.576,179,6.144,180,17.25,181,6.144,182,6.144,183,6.144,184,6.144,185,6.144,186,6.144,187,20.498,188,6.144,189,6.144,190,6.144,191,6.144,192,6.144,193,9.624,194,6.144,195,11.576,196,6.144,197,6.144,198,6.144,199,11.576,200,11.576,201,9.624,202,11.576,203,11.576,204,11.576,205,6.144,206,11.576,207,11.576,208,6.144,209,6.144,210,6.144,211,11.576,212,11.576,213,6.144,214,11.576,215,6.144,216,6.144,217,6.144,218,6.144,219,6.144,220,11.576,221,6.144,222,6.144,223,6.144,224,5.108,225,13.645,226,6.144,227,11.576,228,6.144,229,6.144,230,16.414,231,6.144,232,6.144,233,11.576,234,6.144,235,11.576,236,6.144,237,6.144,238,6.144,239,6.144,240,11.576,241,11.576,242,6.144,243,6.144,244,6.144,245,6.144,246,6.144,247,6.144,248,6.144,249,5.108,250,8.338,251,6.144,252,11.576,253,11.576,254,11.576,255,6.144,256,11.576,257,11.576,258,6.144,259,6.144,260,6.144,261,11.576,262,6.144,263,6.144,264,6.144,265,6.144,266,16.414,267,6.144,268,6.144,269,6.144,270,6.144,271,11.576,272,6.144,273,6.144,274,5.108,275,11.576,276,6.144,277,6.144,278,6.144,279,6.144,280,6.144,281,6.144,282,6.144,283,6.144,284,6.144,285,6.144,286,6.144,287,6.144,288,6.144,289,6.144,290,6.144,291,6.144,292,6.144,293,6.144,294,6.144,295,6.144,296,6.144,297,5.108,298,5.108]],["name/27",[27,11.747,63,10.526,111,13.277]],["parent/27",[]],["pagesPluginContent/28",[19,29.032,22,43.105,23,24.575,25,12.465,27,18.801,33,29.032,38,12.465,40,12.465,42,21.25,44,42.499,48,40.083,52,12.465,53,21.25,55,21.25,56,18.801,57,42.792,59,12.465,60,24.528,62,37.862,63,16.846,67,32.813,68,27.775,69,21.25,71,12.465,72,24.528,79,12.465,82,12.465,96,12.465,102,12.465,107,12.465,108,12.465,126,12.465,130,24.528,132,14.388,141,14.388,154,14.388,164,12.465,187,24.528,193,24.528,201,14.388,224,14.388,225,24.528,249,14.388,250,40.083,274,24.528,299,17.307,300,17.307,301,45.559,302,17.307,303,17.307,304,29.504,305,17.307,306,38.564,307,38.564,308,38.564,309,17.307,310,17.307,311,17.307,312,17.307,313,29.504,314,55.653,315,17.307,316,17.307,317,38.564,318,17.307,319,17.307,320,17.307,321,17.307,322,17.307,323,17.307,324,17.307,325,17.307,326,17.307,327,17.307,328,17.307,329,17.307,330,17.307,331,17.307,332,17.307,333,17.307,334,17.307,335,17.307,336,17.307,337,17.307,338,14.388,339,17.307,340,17.307,341,17.307,342,17.307,343,29.504,344,17.307,345,17.307,346,17.307,347,17.307,348,17.307,349,17.307]],["name/28",[250,13.277,297,15.325,298,15.325]],["parent/28",[]],["pagesPluginContent/29",[1,10.267,22,50.772,23,22.904,31,18.215,33,13.963,56,22.904,62,13.963,63,12.511,77,18.215,87,15.781,126,15.781,162,18.215,164,15.781,180,18.215,338,18.215,350,18.215,351,21.911,352,21.911,353,21.911,354,21.911,355,21.911,356,21.911,357,21.911,358,21.911,359,21.911,360,21.911,361,21.911,362,66.241,363,21.911,364,62.717,365,21.911,366,21.911,367,69.156,368,69.156,369,35.942,370,21.911,371,21.911,372,21.911,373,21.911,374,21.911,375,21.911,376,21.911,377,21.911,378,21.911,379,21.911,380,58.368,381,21.911,382,21.911,383,21.911,384,21.911,385,21.911,386,21.911,387,21.911,388,21.911,389,21.911,390,21.911,391,21.911,392,21.911,393,21.911,394,21.911,395,21.911,396,21.911,397,21.911,398,21.911,399,21.911,400,21.911,401,21.911,402,21.911,403,21.911,404,21.911,405,21.911,406,21.911,407,21.911,408,21.911,409,21.911,410,21.911,411,21.911,412,21.911,413,21.911,414,21.911,415,21.911,416,21.911,417,21.911,418,21.911]],["name/29",[350,26.74]],["parent/29",[]]],"invertedIndex":[["",{"_index":22,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["0.0.1](https://github.com/scitizen/nest",{"_index":415,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["0.0.2",{"_index":362,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["06",{"_index":380,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["07",{"_index":376,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["08",{"_index":369,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["1",{"_index":234,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["10",{"_index":368,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["2",{"_index":233,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["2021",{"_index":367,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["467354a](https://github.com/scitizen/nest",{"_index":396,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["9594542](https://github.com/scitizen/nest",{"_index":389,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["__type",{"_index":6,"pagesPluginContent":{},"name":{"9":{}},"parent":{}}],["a",{"_index":40,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["abilities",{"_index":125,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["ability",{"_index":44,"pagesPluginContent":{"26":{},"28":{}},"name":{},"parent":{}}],["abilityfactory",{"_index":12,"pagesPluginContent":{},"name":{"16":{}},"parent":{}}],["able",{"_index":303,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["about",{"_index":230,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["above",{"_index":163,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["access",{"_index":202,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["action`s",{"_index":307,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["actually",{"_index":309,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["add",{"_index":393,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["admin",{"_index":287,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["all",{"_index":77,"pagesPluginContent":{"26":{},"29":{}},"name":{},"parent":{}}],["allow",{"_index":386,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["allowed",{"_index":176,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["also",{"_index":86,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["an",{"_index":165,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["and",{"_index":59,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["any",{"_index":147,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["anything",{"_index":318,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["app",{"_index":244,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["apply",{"_index":245,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["appmodule",{"_index":58,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["approach",{"_index":137,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["approach](#the",{"_index":145,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["are",{"_index":225,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["array",{"_index":263,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["as",{"_index":154,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["assume",{"_index":131,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["assuming",{"_index":160,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["async",{"_index":387,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["at",{"_index":98,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["authenticated",{"_index":279,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["authentication",{"_index":242,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["authorization",{"_index":169,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["aware",{"_index":183,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["bash",{"_index":34,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["basic",{"_index":74,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["be",{"_index":87,"pagesPluginContent":{"26":{},"27":{},"29":{}},"name":{},"parent":{}}],["before",{"_index":118,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["behavior",{"_index":223,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["below",{"_index":238,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["better",{"_index":297,"pagesPluginContent":{"27":{}},"name":{"28":{}},"parent":{}}],["bind",{"_index":290,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["bindpolicydecorators",{"_index":4,"pagesPluginContent":{"27":{}},"name":{"7":{}},"parent":{}}],["boring",{"_index":335,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["both",{"_index":275,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["bound",{"_index":271,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["bound.controller.ts",{"_index":274,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["boundpolicydecorators",{"_index":5,"pagesPluginContent":{},"name":{"8":{}},"parent":{"9":{}}}],["boundpolicydecorators.__type",{"_index":7,"pagesPluginContent":{},"name":{},"parent":{"10":{},"11":{}}}],["bug",{"_index":391,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["but",{"_index":193,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["by",{"_index":294,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["calls",{"_index":257,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["can",{"_index":68,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["can't",{"_index":304,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["canactivate",{"_index":401,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["cannot",{"_index":319,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["care",{"_index":191,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["care.controller.ts",{"_index":91,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["casl",{"_index":37,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["casl/commit/467354a0434a6518f52697c7ab46642ed9384f8e",{"_index":397,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["casl/commit/95945423b9d78ecb1353fe6c1a2228d5c9571cec",{"_index":390,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["casl/commit/f92f45e023c36a7fdfebe01851315d839a2f5a9f",{"_index":408,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["casl/compare/78f16a2f9e103be41b9d6a872f547eb54bc0d80e...v0.0.1",{"_index":416,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["casl/compare/v0.0.1...v0.0.2",{"_index":413,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["casl/compare/v0.0.2",{"_index":364,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["caslabilityfactory",{"_index":19,"pagesPluginContent":{"27":{},"28":{}},"name":{"23":{}},"parent":{"24":{}}}],["caslmodule",{"_index":8,"pagesPluginContent":{"26":{}},"name":{"12":{}},"parent":{"13":{},"14":{}}}],["chances",{"_index":326,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["changelog",{"_index":350,"pagesPluginContent":{"29":{}},"name":{"29":{}},"parent":{}}],["changelog/standard",{"_index":358,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["changes",{"_index":352,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["check",{"_index":102,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["checking",{"_index":119,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["checks",{"_index":404,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["class",{"_index":81,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["close",{"_index":155,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["codeblock",{"_index":48,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["commit",{"_index":360,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["compatible",{"_index":26,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["condition",{"_index":261,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["configuration",{"_index":30,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["configure",{"_index":60,"pagesPluginContent":{"26":{},"28":{}},"name":{},"parent":{}}],["constrain",{"_index":339,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["constrained",{"_index":320,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["constraint",{"_index":332,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["constraints",{"_index":298,"pagesPluginContent":{"27":{}},"name":{"28":{}},"parent":{}}],["constructor",{"_index":10,"pagesPluginContent":{},"name":{"14":{}},"parent":{}}],["context",{"_index":248,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["continue",{"_index":177,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["contraints",{"_index":347,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["controller",{"_index":80,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["controllers",{"_index":73,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["correct",{"_index":395,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["course",{"_index":292,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["createfromrequest",{"_index":20,"pagesPluginContent":{},"name":{"24":{}},"parent":{}}],["cumulative",{"_index":258,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["current",{"_index":46,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["declare",{"_index":39,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["declared",{"_index":311,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["decorator",{"_index":82,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["decorators",{"_index":72,"pagesPluginContent":{"26":{},"28":{}},"name":{},"parent":{}}],["define",{"_index":312,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["delegate",{"_index":208,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["dependencies",{"_index":149,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["dependency",{"_index":153,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["depending",{"_index":247,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["directly",{"_index":143,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["do",{"_index":129,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["documented",{"_index":354,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["does",{"_index":150,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["each",{"_index":246,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["either",{"_index":282,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["enjoy",{"_index":346,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["evaluated",{"_index":265,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["even",{"_index":269,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["every",{"_index":337,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["example",{"_index":166,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["exception",{"_index":172,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["execute",{"_index":116,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["external",{"_index":152,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["extract",{"_index":120,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["extraguard1",{"_index":283,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["extraguard2",{"_index":284,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["f92f45e](https://github.com/scitizen/nest",{"_index":407,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["fact",{"_index":194,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["factory",{"_index":64,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["factory.service.ts",{"_index":53,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["far",{"_index":300,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["features",{"_index":384,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["file",{"_index":355,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["first",{"_index":31,"pagesPluginContent":{"26":{},"29":{}},"name":{},"parent":{}}],["fixes",{"_index":392,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["folded",{"_index":104,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["following",{"_index":133,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["for",{"_index":164,"pagesPluginContent":{"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["forbidden",{"_index":174,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["from",{"_index":45,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["further",{"_index":403,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["generate",{"_index":43,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["generating",{"_index":123,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["getting",{"_index":112,"pagesPluginContent":{},"name":{"26":{}},"parent":{}}],["give",{"_index":200,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["great",{"_index":323,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["greatly",{"_index":324,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["group",{"_index":94,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["guard",{"_index":161,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guard](https://github.com/nestjs/passport/blob/6aef921c7566766d0eb9e79d2c8235177c539863/lib/auth.guard.ts#l58",{"_index":196,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards",{"_index":111,"pagesPluginContent":{"26":{},"27":{}},"name":{"27":{}},"parent":{}}],["guards/ability",{"_index":135,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/jwt",{"_index":213,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/naive",{"_index":226,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/naive.controller.ts",{"_index":197,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/naive.guard.ts",{"_index":158,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/passport",{"_index":219,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/recommended",{"_index":296,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/recommended.controller.ts#recommended",{"_index":266,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guardslist",{"_index":18,"pagesPluginContent":{},"name":{"22":{}},"parent":{}}],["guidelines",{"_index":361,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["handle",{"_index":16,"pagesPluginContent":{},"name":{"20":{}},"parent":{}}],["handlers",{"_index":388,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["has",{"_index":286,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["have",{"_index":132,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["he",{"_index":285,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["header",{"_index":170,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["here",{"_index":224,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["hopefully",{"_index":340,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["i'm",{"_index":182,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["icaslrootconfig",{"_index":11,"pagesPluginContent":{},"name":{"15":{}},"parent":{"16":{}}}],["ide",{"_index":328,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["ideal",{"_index":184,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["if",{"_index":92,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["implementation",{"_index":167,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["import",{"_index":54,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["in",{"_index":56,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["individual",{"_index":89,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["informations",{"_index":122,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["initial",{"_index":417,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["injectability",{"_index":0,"pagesPluginContent":{},"name":{"0":{}},"parent":{}}],["install",{"_index":32,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["interceptor`](https://docs.nestjs.com/interceptors",{"_index":188,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["invalid",{"_index":173,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["ipolicy",{"_index":15,"pagesPluginContent":{},"name":{"19":{}},"parent":{"20":{}}}],["is",{"_index":25,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["it",{"_index":61,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["its",{"_index":124,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["join",{"_index":260,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["just",{"_index":293,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["jwt",{"_index":211,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["let's",{"_index":130,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["level",{"_index":99,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["like",{"_index":218,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["link",{"_index":55,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["matching",{"_index":310,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["maybeasyncvalue",{"_index":21,"pagesPluginContent":{},"name":{"25":{}},"parent":{}}],["metadata",{"_index":394,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["method",{"_index":138,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["method1",{"_index":276,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["method2",{"_index":277,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["methods",{"_index":78,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["middleware`](https://docs.nestjs.com/middleware",{"_index":186,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["might",{"_index":141,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["module",{"_index":24,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["more",{"_index":148,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["moreover",{"_index":249,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["most",{"_index":114,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["multiple",{"_index":241,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["myability",{"_index":316,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["naive",{"_index":217,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["naive.controller.ts",{"_index":220,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["naiveguard",{"_index":199,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["naïve",{"_index":136,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["nestjs",{"_index":156,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["nestjs/passport`](https://www.npmjs.com/package/@nestjs/passport",{"_index":195,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["nestjs@^8.0.0",{"_index":28,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["next",{"_index":109,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["next.0",{"_index":414,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.0...v0.0.2",{"_index":410,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.0](https://github.com/scitizen/nest",{"_index":412,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.1",{"_index":411,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.1...v0.0.2",{"_index":382,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.1](https://github.com/scitizen/nest",{"_index":409,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.2",{"_index":383,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.2...v0.0.2",{"_index":378,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.2](https://github.com/scitizen/nest",{"_index":381,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.3",{"_index":379,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.3...v0.0.2",{"_index":374,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.3](https://github.com/scitizen/nest",{"_index":377,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.4",{"_index":375,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.4...v0.0.2",{"_index":371,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.4](https://github.com/scitizen/nest",{"_index":373,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.5",{"_index":372,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.5...v0.0.2",{"_index":365,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.5](https://github.com/scitizen/nest",{"_index":370,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.6",{"_index":366,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.6](https://github.com/scitizen/nest",{"_index":363,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["not",{"_index":139,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["notable",{"_index":351,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["note",{"_index":289,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["now",{"_index":69,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["npm",{"_index":35,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["of",{"_index":79,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["on",{"_index":180,"pagesPluginContent":{"27":{},"29":{}},"name":{},"parent":{}}],["or",{"_index":187,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["or.guard",{"_index":398,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["order",{"_index":338,"pagesPluginContent":{"28":{},"29":{}},"name":{},"parent":{}}],["our",{"_index":306,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["owner.controller.ts",{"_index":85,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["page",{"_index":110,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["parameter",{"_index":331,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["part",{"_index":336,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["pass",{"_index":317,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["passes",{"_index":281,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["passport",{"_index":207,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["passport.strategy.ts",{"_index":214,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["placed",{"_index":237,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["policies",{"_index":96,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["policies.guard",{"_index":385,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["policies.ts",{"_index":343,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["policiesguard",{"_index":204,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["policiesmask",{"_index":3,"pagesPluginContent":{"26":{},"27":{}},"name":{"4":{},"5":{},"11":{}},"parent":{"6":{}}}],["policiesmask.usingguard",{"_index":254,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["policy",{"_index":1,"pagesPluginContent":{"26":{},"27":{},"29":{}},"name":{"1":{},"2":{},"10":{}},"parent":{"3":{}}}],["policy.usingguard",{"_index":253,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["policydescriptor",{"_index":13,"pagesPluginContent":{"27":{}},"name":{"17":{}},"parent":{}}],["policydescriptormask",{"_index":14,"pagesPluginContent":{},"name":{"18":{}},"parent":{}}],["possible",{"_index":157,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["prefer",{"_index":251,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["prepare",{"_index":270,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["prepended",{"_index":255,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["presets",{"_index":252,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["problem",{"_index":229,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["project",{"_index":353,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["promises",{"_index":406,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["properly",{"_index":399,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["property",{"_index":178,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["protect",{"_index":76,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["provide",{"_index":262,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["provider",{"_index":41,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["ran",{"_index":239,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["readability",{"_index":235,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["recommanded",{"_index":140,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["recommended",{"_index":144,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["reduce",{"_index":325,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["release",{"_index":418,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["request",{"_index":47,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["require",{"_index":151,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["ressource",{"_index":203,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["retrieval",{"_index":209,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["reusability",{"_index":240,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["role",{"_index":288,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["run",{"_index":278,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["same",{"_index":97,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["say",{"_index":210,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["scitizen/nest",{"_index":36,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["see",{"_index":162,"pagesPluginContent":{"27":{},"29":{}},"name":{},"parent":{}}],["set",{"_index":179,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["setting",{"_index":192,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["setup",{"_index":29,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["should",{"_index":189,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["show",{"_index":127,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["simple",{"_index":267,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["simplepolicy",{"_index":17,"pagesPluginContent":{},"name":{"21":{}},"parent":{}}],["simply",{"_index":345,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["skip",{"_index":142,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["so",{"_index":299,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["solve",{"_index":341,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["some",{"_index":117,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["spec.ts",{"_index":107,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["spec.ts#abilityfactory",{"_index":51,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["spec.ts#appmodule",{"_index":65,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["spec.ts#catcarecontroller",{"_index":90,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["spec.ts#catcontroller",{"_index":100,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["spec.ts#catownercontroller",{"_index":83,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["spec.ts#test",{"_index":105,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["src/ability",{"_index":52,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["src/app.module.ts",{"_index":66,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["src/cat",{"_index":84,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["src/cat.controller.ts",{"_index":101,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["src/controllers/naive.controller.ts",{"_index":198,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/controllers/passport",{"_index":221,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/controllers/recommended.controller.ts",{"_index":268,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/guards/naive.guard.ts",{"_index":159,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/my",{"_index":344,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["src/policies.ts",{"_index":272,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/recommended",{"_index":273,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/strategies/jwt",{"_index":215,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/test",{"_index":349,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["src/test.controller.ts",{"_index":334,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["standard",{"_index":356,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["start",{"_index":70,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["started",{"_index":113,"pagesPluginContent":{},"name":{"26":{}},"parent":{}}],["still",{"_index":216,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["stop",{"_index":402,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["strategies",{"_index":243,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["strategy",{"_index":212,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["subject`s",{"_index":308,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["subsequent",{"_index":259,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["succeed",{"_index":205,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["success",{"_index":405,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["suggest",{"_index":329,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["take",{"_index":190,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["test.e2e",{"_index":227,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["test/basic",{"_index":49,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["test/better",{"_index":314,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["test/cats.e2e",{"_index":106,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["test/use",{"_index":134,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["tested",{"_index":291,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["tests",{"_index":103,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["that",{"_index":42,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["that's",{"_index":322,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["the",{"_index":33,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["them",{"_index":201,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["then",{"_index":38,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["there",{"_index":232,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["they",{"_index":264,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["this",{"_index":23,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["those",{"_index":256,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["through",{"_index":280,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["times",{"_index":115,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["to",{"_index":62,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["type",{"_index":250,"pagesPluginContent":{"27":{},"28":{}},"name":{"28":{}},"parent":{}}],["types",{"_index":313,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/ability",{"_index":330,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/ability.ts",{"_index":315,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/ability.typecheck.e2e",{"_index":321,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/my",{"_index":342,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/test",{"_index":348,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/test.controller.ts",{"_index":333,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["typos",{"_index":327,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["unauthorized",{"_index":171,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["usage",{"_index":75,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["use",{"_index":63,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{"27":{}},"parent":{}}],["use.e2e",{"_index":50,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["used",{"_index":88,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["useguards",{"_index":236,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["user",{"_index":121,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["users",{"_index":168,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["using",{"_index":71,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["usingguard",{"_index":2,"pagesPluginContent":{},"name":{"3":{},"6":{}},"parent":{}}],["valid",{"_index":175,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["various",{"_index":95,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["version",{"_index":359,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["version](https://github.com/conventional",{"_index":357,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["wanna",{"_index":222,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["want",{"_index":93,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["waterfall",{"_index":400,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["way",{"_index":128,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["we",{"_index":301,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["well",{"_index":231,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["were",{"_index":302,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["what",{"_index":108,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["what's",{"_index":228,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["will",{"_index":126,"pagesPluginContent":{"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["with",{"_index":27,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{"27":{}},"parent":{}}],["withconfig",{"_index":9,"pagesPluginContent":{},"name":{"13":{}},"parent":{}}],["without",{"_index":146,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["world",{"_index":185,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["yeah",{"_index":181,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["yet",{"_index":305,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["you",{"_index":67,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["you're",{"_index":206,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["your",{"_index":57,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["yourself",{"_index":295,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}]],"pipeline":[]}} \ No newline at end of file +{"kinds":{"2":"Namespace","64":"Function","128":"Class","256":"Interface","512":"Constructor","1024":"Property","2048":"Method","65536":"Type literal","4194304":"Type alias","9999999":"Page"},"rows":[{"id":0,"kind":64,"name":"InjectAbility","url":"modules.html#InjectAbility","classes":"tsd-kind-function"},{"id":1,"kind":64,"name":"Policy","url":"modules.html#Policy","classes":"tsd-kind-function tsd-has-type-parameter"},{"id":2,"kind":2,"name":"Policy","url":"modules/Policy.html","classes":"tsd-kind-namespace"},{"id":3,"kind":64,"name":"usingGuard","url":"modules/Policy.html#usingGuard","classes":"tsd-kind-function tsd-parent-kind-namespace","parent":"Policy","pagesPluginParent":"Policy."},{"id":4,"kind":64,"name":"PoliciesMask","url":"modules.html#PoliciesMask","classes":"tsd-kind-function tsd-has-type-parameter"},{"id":5,"kind":2,"name":"PoliciesMask","url":"modules/PoliciesMask.html","classes":"tsd-kind-namespace"},{"id":6,"kind":64,"name":"usingGuard","url":"modules/PoliciesMask.html#usingGuard","classes":"tsd-kind-function tsd-parent-kind-namespace","parent":"PoliciesMask","pagesPluginParent":"PoliciesMask."},{"id":7,"kind":64,"name":"bindPolicyDecorators","url":"modules.html#bindPolicyDecorators","classes":"tsd-kind-function tsd-has-type-parameter"},{"id":8,"kind":4194304,"name":"BoundPolicyDecorators","url":"modules.html#BoundPolicyDecorators","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":9,"kind":65536,"name":"__type","url":"modules.html#BoundPolicyDecorators.__type","classes":"tsd-kind-type-literal tsd-parent-kind-type-alias","parent":"BoundPolicyDecorators","pagesPluginParent":"BoundPolicyDecorators."},{"id":10,"kind":1024,"name":"Policy","url":"modules.html#BoundPolicyDecorators.__type.Policy","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"BoundPolicyDecorators.__type","pagesPluginParent":"BoundPolicyDecorators.__type."},{"id":11,"kind":1024,"name":"PoliciesMask","url":"modules.html#BoundPolicyDecorators.__type.PoliciesMask","classes":"tsd-kind-property tsd-parent-kind-type-literal","parent":"BoundPolicyDecorators.__type","pagesPluginParent":"BoundPolicyDecorators.__type."},{"id":12,"kind":128,"name":"CaslModule","url":"classes/CaslModule.html","classes":"tsd-kind-class"},{"id":13,"kind":2048,"name":"withConfig","url":"classes/CaslModule.html#withConfig","classes":"tsd-kind-method tsd-parent-kind-class tsd-is-static","parent":"CaslModule","pagesPluginParent":"CaslModule."},{"id":14,"kind":512,"name":"constructor","url":"classes/CaslModule.html#constructor","classes":"tsd-kind-constructor tsd-parent-kind-class","parent":"CaslModule","pagesPluginParent":"CaslModule."},{"id":15,"kind":256,"name":"ICaslRootConfig","url":"interfaces/ICaslRootConfig.html","classes":"tsd-kind-interface tsd-has-type-parameter"},{"id":16,"kind":1024,"name":"abilityFactory","url":"interfaces/ICaslRootConfig.html#abilityFactory","classes":"tsd-kind-property tsd-parent-kind-interface","parent":"ICaslRootConfig","pagesPluginParent":"ICaslRootConfig."},{"id":17,"kind":4194304,"name":"PolicyDescriptor","url":"modules.html#PolicyDescriptor","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":18,"kind":4194304,"name":"PolicyDescriptorMask","url":"modules.html#PolicyDescriptorMask","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":19,"kind":256,"name":"IPolicy","url":"interfaces/IPolicy.html","classes":"tsd-kind-interface tsd-has-type-parameter"},{"id":20,"kind":2048,"name":"handle","url":"interfaces/IPolicy.html#handle","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"IPolicy","pagesPluginParent":"IPolicy."},{"id":21,"kind":4194304,"name":"SimplePolicy","url":"modules.html#SimplePolicy","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":22,"kind":4194304,"name":"GuardsList","url":"modules.html#GuardsList","classes":"tsd-kind-type-alias"},{"id":23,"kind":256,"name":"CaslAbilityFactory","url":"interfaces/CaslAbilityFactory.html","classes":"tsd-kind-interface tsd-has-type-parameter"},{"id":24,"kind":2048,"name":"createFromRequest","url":"interfaces/CaslAbilityFactory.html#createFromRequest","classes":"tsd-kind-method tsd-parent-kind-interface","parent":"CaslAbilityFactory","pagesPluginParent":"CaslAbilityFactory."},{"id":25,"kind":4194304,"name":"MaybeAsyncValue","url":"modules.html#MaybeAsyncValue","classes":"tsd-kind-type-alias tsd-has-type-parameter"},{"id":26,"kind":1,"name":"Getting started","url":"pages/Guides/getting-started.html","classes":"tsd-kind-page","pagesPluginContent":"> This module is compatible with `nestjs@^8.0.0`.\n\n# Setup & configuration\n\nFirst, install the module:\n\n```bash\nnpm install @scitizen/nest-casl\n```\n\nThen, declare a provider that generate a CASL Ability from the current request.\n\n{@codeblock test/basic-use.e2e-spec.ts#AbilityFactory | src/ability-factory.service.ts}\n\nImport the {@link CaslModule `CaslModule`} in your `AppModule`, and configure it to use your ability factory.\n\n{@codeblock test/basic-use.e2e-spec.ts#AppModule | src/app.module.ts}\n\nYou can now start using policy decorators ({@link Policy `Policy`} and {@link PoliciesMask `PoliciesMask`}) in your controllers !\n\n# Basic usage\n\nYou can protect all methods of your controller using the {@link Policy `Policy`} class decorator.\n\n{@codeblock test/basic-use.e2e-spec.ts#CatOwnerController | src/cat-owner.controller.ts}\n\nThis decorator can also be used to protect individual methods.\n\n{@codeblock test/basic-use.e2e-spec.ts#CatCareController | src/cat-care.controller.ts}\n\nIf you want to group various policies in the same decorator at the controller level, use the {@link PoliciesMask `PoliciesMask`} decorator.\n\n{@codeblock test/basic-use.e2e-spec.ts#CatController | src/cat.controller.ts}\n\nCheck the tests !\n\n{@codeblock folded test/basic-use.e2e-spec.ts#Test | test/cats.e2e-spec.ts}\n\n# What next ?\n\n{@page Use with guards}","pagesPluginParent":"Guides / "},{"id":27,"kind":1,"name":"Use with guards","url":"pages/Guides/use-with-guards.html","classes":"tsd-kind-page","pagesPluginContent":"Most of the times, you want to execute some guards before checking CASL policies, to extract some user informations before generating its abilities.\n\nThis page will show you the various way to do.\n\nLet's assume you have the following {@link CaslAbilityFactory `CaslAbilityFactory`}:\n\n{@codeblock test/use-with-guards/ability-factory.service.ts | src/ability-factory.service.ts}\n\n# The naïve approach\n\n> This method is **not recommanded**. You might skip directly to the [recommended approach](#the-recommended-approach)\n\n## Without any more dependencies\n\nThis method does not require any external dependency, and is as close to NestJS as possible.\n\n{@codeblock folded test/use-with-guards/naive.guard.ts | src/guards/naive.guard.ts}\n\nAssuming the guard does the following (see above for an example implementation):\n* Users without an `Authorization` header will see an `Unauthorized` exception.\n* Users with an invalid `Authorization` header will see a `Forbidden` exception.\n* Users with a valid `Authorization` header will be allowed to continue, and the property `user` is set on the `request`.\n\n> Yeah, I'm aware that in an ideal world, a [`Middleware`](https://docs.nestjs.com/middleware) or an [`Interceptor`](https://docs.nestjs.com/interceptors) should take care of setting the `user` property on the `Request`. But fact is that [`@nestjs/passport`](https://www.npmjs.com/package/@nestjs/passport) does it [in a guard](https://github.com/nestjs/passport/blob/6aef921c7566766d0eb9e79d2c8235177c539863/lib/auth.guard.ts#L58)\n\n{@codeblock test/use-with-guards/naive.controller.ts | src/controllers/naive.controller.ts}\n\nNow,\n* Users without an `Authorization` header will see an `Unauthorized` exception (from the `NaiveGuard`).\n* Users with an invalid `Authorization` header will see a `Forbidden` exception (from the `NaiveGuard`).\n* Users with an `Authorization` header that does not give them access to the ressource will see a `Forbidden` exception (from the {@link PoliciesGuard `PoliciesGuard`}).\n* Users with an `Authorization` header that give them access to the ressource will succeed.\n\n## Using [`@nestjs/passport`](https://www.npmjs.com/package/@nestjs/passport)\n\nIf you're using `passport`, you can delegate the user retrieval. Let's say you have a JWT `passport` strategy.\n\n{@codeblock folded test/use-with-guards/jwt-passport.strategy.ts | src/strategies/jwt-passport.strategy.ts}\n\nStill using the naive approach, you can then declare the controller like this:\n\n{@codeblock test/use-with-guards/passport-naive.controller.ts | src/controllers/passport-naive.controller.ts}\n\n## The tests\n\nWanna see the behavior as tests ? Here you are !\n\n{@codeblock folded test/use-with-guards/naive-test.e2e-spec.ts}\n\n# The recommended approach\n\nWhat's the problem about the naïve approach above ? Well, there are 2.\n1. *The readability*: The `UseGuards` decorator is placed **below** the {@link Policy `Policy`} decorator, but is ran **before** it.\n2. *The reusability*: If you're using multiple authentication strategies in the same app, you might have to apply guards **and** the policies on each method depending on the context. Moreover, if you want to type-check your policies, you might prefer to have abilities presets.\n\n## About readability\n\nYou can use {@link Policy.usingGuard `Policy.usingGuard`} or {@link PoliciesMask.usingGuard `PoliciesMask.usingGuard`} to prepended guards to the decorator factory. Those calls are cumulative, and you can do multiple subsequent calls to join guards using an `and` condition. If you provide an array of guards, they be evaluated using an `or` condition.\n\n{@codeblock test/use-with-guards/recommended.controller.ts#Recommended simple controller | src/controllers/recommended.controller.ts}\n\n## About reusability\n\nYou can even prepare a policy decorator with guards or {@link PolicyDescriptor `PolicyDescriptor`}:\n\n{@codeblock test/use-with-guards/recommended.controller.ts#Recommended bound | src/policies.ts}\n\nThen, use those presets in your controller:\n\n{@codeblock test/use-with-guards/recommended.controller.ts#Recommended bound controller | src/recommended-bound.controller.ts}\n\nNow, both `method1` and `method2` will run if\n* the user is authenticated through `jwt` strategy\n* it passes either `ExtraGuard1` or `ExtraGuard2`\n* and he has admin role.\n\n> Note that you can use {@link bindPolicyDecorators `bindPolicyDecorators`} to bind *both* {@link Policy `Policy`} and {@link PoliciesMask `PoliciesMask`}\n\n## The tests\n\nThis is tested, of course. Just see by yourself.\n\n{@codeblock folded test/use-with-guards/recommended-test.e2e-spec.ts}\n\n# What next ?\n\n{@page Better type constraints}","pagesPluginParent":"Guides / "},{"id":28,"kind":1,"name":"Better type constraints","url":"pages/Guides/better-type-constraints.html","classes":"tsd-kind-page","pagesPluginContent":"So far, we were able to configure your policies. But we can't yet check that our `action`s or `subject`s are actually matching what we declared.\n\n# Define the ability type\n\nLet's configure our ability types:\n\n{@codeblock test/better-types/ability.ts}\n\nUsing `MyAbility`, we can't pass anything to `can` or `cannot`: types are constrained.\n\n{@codeblock test/better-types/ability.typecheck.e2e-spec.ts}\n\nThat's great. This will greatly reduce our chances of typos. Moreover, your IDE might now suggest `action`s & `subject`s for you.\n\n# Use the ability type\n\n## With the {@link CaslAbilityFactory `CaslAbilityFactory`}\n\nLet's now use this type in your {@link CaslAbilityFactory `CaslAbilityFactory`}:\n\n{@codeblock test/better-types/ability-factory.service.ts | src/ability-factory.service.ts}\n\n## With decorators\n\nYou can pass your ability as a type parameter to your decorators to constraint your `action`s and `subject`s:\n\n{@codeblock test/better-types/test.controller.ts | src/test.controller.ts}\n\nBut the boring part here is that you have to pass your ability type to **every** decorator in order to constrain them. Hopefully, you can solve this:\n\n{@codeblock test/better-types/my-policies.ts | src/my-policies.ts}\n\nThen, simply enjoy type contraints !\n\n{@codeblock test/better-types/test-bound.controller.ts | src/test-bound.controller.ts}\n","pagesPluginParent":"Guides / "},{"id":29,"kind":1,"name":"Changelog","url":"pages/Changelog/CHANGELOG.html","classes":"tsd-kind-page","pagesPluginContent":"# Changelog\n\nAll notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.\n\n### [0.0.2-next.7](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.6...v0.0.2-next.7) (2021-10-08)\n\n### [0.0.2-next.6](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.5...v0.0.2-next.6) (2021-10-08)\n\n### [0.0.2-next.5](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.4...v0.0.2-next.5) (2021-10-08)\n\n### [0.0.2-next.4](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.3...v0.0.2-next.4) (2021-10-07)\n\n### [0.0.2-next.3](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.2...v0.0.2-next.3) (2021-10-06)\n\n### [0.0.2-next.2](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.1...v0.0.2-next.2) (2021-10-06)\n\n\n### Features\n\n* **policies.guard:** allow async handlers ([9594542](https://github.com/Scitizen/nest-casl/commit/95945423b9d78ecb1353fe6c1a2228d5c9571cec))\n\n\n### Bug Fixes\n\n* add policy metadata in the correct order ([467354a](https://github.com/Scitizen/nest-casl/commit/467354a0434a6518f52697c7ab46642ed9384f8e))\n* **or.guard:** properly waterfall canActivate, stop further checks on first success, use promises ([f92f45e](https://github.com/Scitizen/nest-casl/commit/f92f45e023c36a7fdfebe01851315d839a2f5a9f))\n\n### [0.0.2-next.1](https://github.com/Scitizen/nest-casl/compare/v0.0.2-next.0...v0.0.2-next.1) (2021-10-06)\n\n### [0.0.2-next.0](https://github.com/Scitizen/nest-casl/compare/v0.0.1...v0.0.2-next.0) (2021-10-06)\n\n### [0.0.1](https://github.com/Scitizen/nest-casl/compare/78f16a2f9e103be41b9d6a872f547eb54bc0d80e...v0.0.1) (2021-10-06)\n\nInitial release\n","pagesPluginParent":"Changelog / "}],"index":{"version":"2.3.9","fields":["pagesPluginContent","name","parent"],"fieldVectors":[["pagesPluginContent/0",[]],["name/0",[0,32.165]],["parent/0",[]],["pagesPluginContent/1",[]],["name/1",[1,15.072]],["parent/1",[]],["pagesPluginContent/2",[]],["name/2",[1,15.072]],["parent/2",[]],["pagesPluginContent/3",[]],["name/3",[2,26.74]],["parent/3",[1,0.78]],["pagesPluginContent/4",[]],["name/4",[3,16.591]],["parent/4",[]],["pagesPluginContent/5",[]],["name/5",[3,16.591]],["parent/5",[]],["pagesPluginContent/6",[]],["name/6",[2,26.74]],["parent/6",[3,0.859]],["pagesPluginContent/7",[]],["name/7",[4,26.74]],["parent/7",[]],["pagesPluginContent/8",[]],["name/8",[5,26.74]],["parent/8",[]],["pagesPluginContent/9",[]],["name/9",[6,32.165]],["parent/9",[5,1.385]],["pagesPluginContent/10",[]],["name/10",[1,15.072]],["parent/10",[7,1.385]],["pagesPluginContent/11",[]],["name/11",[3,16.591]],["parent/11",[7,1.385]],["pagesPluginContent/12",[]],["name/12",[8,20.497]],["parent/12",[]],["pagesPluginContent/13",[]],["name/13",[9,32.165]],["parent/13",[8,1.061]],["pagesPluginContent/14",[]],["name/14",[10,32.165]],["parent/14",[8,1.061]],["pagesPluginContent/15",[]],["name/15",[11,26.74]],["parent/15",[]],["pagesPluginContent/16",[]],["name/16",[12,32.165]],["parent/16",[11,1.385]],["pagesPluginContent/17",[]],["name/17",[13,26.74]],["parent/17",[]],["pagesPluginContent/18",[]],["name/18",[14,32.165]],["parent/18",[]],["pagesPluginContent/19",[]],["name/19",[15,26.74]],["parent/19",[]],["pagesPluginContent/20",[]],["name/20",[16,32.165]],["parent/20",[15,1.385]],["pagesPluginContent/21",[]],["name/21",[17,32.165]],["parent/21",[]],["pagesPluginContent/22",[]],["name/22",[18,32.165]],["parent/22",[]],["pagesPluginContent/23",[]],["name/23",[19,20.497]],["parent/23",[]],["pagesPluginContent/24",[]],["name/24",[20,32.165]],["parent/24",[19,1.061]],["pagesPluginContent/25",[]],["name/25",[21,32.165]],["parent/25",[]],["pagesPluginContent/26",[1,24.488,3,24.085,8,19.411,22,48.835,23,19.411,24,30.461,25,12.942,26,17.969,27,19.411,28,17.969,29,17.969,30,17.969,31,14.938,32,30.461,33,40.559,34,17.969,35,17.969,36,17.969,37,25.323,38,12.942,39,14.938,40,21.939,41,17.969,42,12.942,43,17.969,44,25.323,45,14.938,46,17.969,47,14.938,48,40.891,49,56.775,50,56.775,51,17.969,52,12.942,53,12.942,54,17.969,55,37.639,56,25.266,57,33.628,58,17.969,59,21.939,60,14.938,61,14.938,62,25.266,63,22.639,64,14.938,65,17.969,66,17.969,67,28.557,68,28.557,69,12.942,70,17.969,71,21.939,72,14.938,73,17.969,74,17.969,75,17.969,76,30.461,77,14.938,78,30.461,79,12.942,80,25.323,81,17.969,82,33.628,83,17.969,84,30.461,85,17.969,86,17.969,87,12.942,88,17.969,89,17.969,90,17.969,91,17.969,92,14.938,93,14.938,94,17.969,95,14.938,96,12.942,97,14.938,98,17.969,99,17.969,100,17.969,101,17.969,102,12.942,103,14.938,104,14.938,105,17.969,106,17.969,107,12.942,108,12.942,109,14.938,110,14.938,111,12.942]],["name/26",[112,23.437,113,23.437]],["parent/26",[]],["pagesPluginContent/27",[1,11.625,3,6.015,4,9.694,13,9.694,19,7.431,22,44.064,23,15.81,25,24.884,27,32.722,33,44.064,37,5.147,38,8.399,39,5.147,40,24.884,42,17.869,45,13.74,47,9.694,48,28.63,52,4.459,53,8.399,55,26.835,56,13.309,57,8.399,59,24.884,61,13.74,62,31.694,63,9.437,64,5.147,67,36.983,68,20.428,69,8.399,71,20.428,79,15.042,80,17.362,82,15.042,87,8.399,92,20.625,93,9.694,95,5.147,96,11.903,97,5.147,102,4.459,103,13.74,104,17.362,107,8.399,108,4.459,109,5.147,110,9.694,111,20.428,114,6.192,115,6.192,116,6.192,117,11.661,118,16.527,119,6.192,120,6.192,121,24.81,122,6.192,123,6.192,124,6.192,125,11.661,126,26.835,127,6.192,128,6.192,129,11.661,130,9.694,131,6.192,132,17.362,133,11.661,134,39.752,135,6.192,136,11.661,137,24.81,138,16.527,139,16.527,140,6.192,141,13.74,142,6.192,143,6.192,144,16.527,145,6.192,146,16.527,147,11.661,148,6.192,149,6.192,150,20.885,151,6.192,152,6.192,153,6.192,154,13.74,155,6.192,156,6.192,157,6.192,158,6.192,159,6.192,160,6.192,161,6.192,162,28.722,163,11.661,164,4.459,165,48.014,166,6.192,167,6.192,168,31.597,169,31.597,170,31.597,171,11.661,172,24.81,173,11.661,174,16.527,175,6.192,176,6.192,177,6.192,178,11.661,179,6.192,180,17.362,181,6.192,182,6.192,183,6.192,184,6.192,185,6.192,186,6.192,187,20.625,188,6.192,189,6.192,190,6.192,191,6.192,192,6.192,193,9.694,194,6.192,195,11.661,196,6.192,197,6.192,198,6.192,199,11.661,200,11.661,201,9.694,202,11.661,203,11.661,204,11.661,205,6.192,206,11.661,207,11.661,208,6.192,209,6.192,210,6.192,211,11.661,212,11.661,213,6.192,214,11.661,215,6.192,216,6.192,217,6.192,218,6.192,219,6.192,220,11.661,221,6.192,222,6.192,223,6.192,224,5.147,225,13.74,226,6.192,227,11.661,228,6.192,229,6.192,230,16.527,231,6.192,232,6.192,233,11.661,234,6.192,235,11.661,236,6.192,237,6.192,238,6.192,239,6.192,240,11.661,241,11.661,242,6.192,243,6.192,244,6.192,245,6.192,246,6.192,247,6.192,248,6.192,249,5.147,250,8.399,251,6.192,252,11.661,253,11.661,254,11.661,255,6.192,256,11.661,257,11.661,258,6.192,259,6.192,260,6.192,261,11.661,262,6.192,263,6.192,264,6.192,265,6.192,266,16.527,267,6.192,268,6.192,269,6.192,270,6.192,271,11.661,272,6.192,273,6.192,274,5.147,275,11.661,276,6.192,277,6.192,278,6.192,279,6.192,280,6.192,281,6.192,282,6.192,283,6.192,284,6.192,285,6.192,286,6.192,287,6.192,288,6.192,289,6.192,290,6.192,291,6.192,292,6.192,293,6.192,294,6.192,295,6.192,296,6.192,297,5.147,298,5.147]],["name/27",[27,11.747,63,10.526,111,13.277]],["parent/27",[]],["pagesPluginContent/28",[19,29.156,22,43.215,23,24.693,25,12.546,27,18.906,33,29.156,38,12.546,40,12.546,42,21.368,44,42.663,48,40.223,52,12.546,53,21.368,55,21.368,56,18.906,57,42.928,59,12.546,60,24.664,62,37.982,63,16.94,67,32.953,68,27.909,69,21.368,71,12.546,72,24.664,79,12.546,82,12.546,96,12.546,102,12.546,107,12.546,108,12.546,126,12.546,130,24.664,132,14.481,141,14.481,154,14.481,164,12.546,187,24.664,193,24.664,201,14.481,224,14.481,225,24.664,249,14.481,250,40.223,274,24.664,299,17.419,300,17.419,301,45.754,302,17.419,303,17.419,304,29.668,305,17.419,306,38.75,307,38.75,308,38.75,309,17.419,310,17.419,311,17.419,312,17.419,313,29.668,314,55.847,315,17.419,316,17.419,317,38.75,318,17.419,319,17.419,320,17.419,321,17.419,322,17.419,323,17.419,324,17.419,325,17.419,326,17.419,327,17.419,328,17.419,329,17.419,330,17.419,331,17.419,332,17.419,333,17.419,334,17.419,335,17.419,336,17.419,337,17.419,338,14.481,339,17.419,340,17.419,341,17.419,342,17.419,343,29.668,344,17.419,345,17.419,346,17.419,347,17.419,348,17.419,349,17.419]],["name/28",[250,13.277,297,15.325,298,15.325]],["parent/28",[]],["pagesPluginContent/29",[1,9.839,22,50.924,23,22.115,31,17.456,33,13.381,56,22.115,62,13.381,63,11.989,77,17.456,87,15.123,126,15.123,162,17.456,164,15.123,180,17.456,338,17.456,350,17.456,351,20.998,352,20.998,353,20.998,354,20.998,355,20.998,356,20.998,357,20.998,358,20.998,359,20.998,360,20.998,361,20.998,362,67.989,363,20.998,364,65.02,365,20.998,366,20.998,367,70.494,368,70.494,369,44.355,370,20.998,371,20.998,372,20.998,373,20.998,374,20.998,375,20.998,376,20.998,377,20.998,378,20.998,379,20.998,380,20.998,381,20.998,382,20.998,383,57.047,384,20.998,385,20.998,386,20.998,387,20.998,388,20.998,389,20.998,390,20.998,391,20.998,392,20.998,393,20.998,394,20.998,395,20.998,396,20.998,397,20.998,398,20.998,399,20.998,400,20.998,401,20.998,402,20.998,403,20.998,404,20.998,405,20.998,406,20.998,407,20.998,408,20.998,409,20.998,410,20.998,411,20.998,412,20.998,413,20.998,414,20.998,415,20.998,416,20.998,417,20.998,418,20.998,419,20.998,420,20.998,421,20.998]],["name/29",[350,26.74]],["parent/29",[]]],"invertedIndex":[["",{"_index":22,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["0.0.1](https://github.com/scitizen/nest",{"_index":418,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["0.0.2",{"_index":362,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["06",{"_index":383,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["07",{"_index":379,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["08",{"_index":369,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["1",{"_index":234,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["10",{"_index":368,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["2",{"_index":233,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["2021",{"_index":367,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["467354a](https://github.com/scitizen/nest",{"_index":399,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["9594542](https://github.com/scitizen/nest",{"_index":392,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["__type",{"_index":6,"pagesPluginContent":{},"name":{"9":{}},"parent":{}}],["a",{"_index":40,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["abilities",{"_index":125,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["ability",{"_index":44,"pagesPluginContent":{"26":{},"28":{}},"name":{},"parent":{}}],["abilityfactory",{"_index":12,"pagesPluginContent":{},"name":{"16":{}},"parent":{}}],["able",{"_index":303,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["about",{"_index":230,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["above",{"_index":163,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["access",{"_index":202,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["action`s",{"_index":307,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["actually",{"_index":309,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["add",{"_index":396,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["admin",{"_index":287,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["all",{"_index":77,"pagesPluginContent":{"26":{},"29":{}},"name":{},"parent":{}}],["allow",{"_index":389,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["allowed",{"_index":176,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["also",{"_index":86,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["an",{"_index":165,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["and",{"_index":59,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["any",{"_index":147,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["anything",{"_index":318,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["app",{"_index":244,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["apply",{"_index":245,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["appmodule",{"_index":58,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["approach",{"_index":137,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["approach](#the",{"_index":145,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["are",{"_index":225,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["array",{"_index":263,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["as",{"_index":154,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["assume",{"_index":131,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["assuming",{"_index":160,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["async",{"_index":390,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["at",{"_index":98,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["authenticated",{"_index":279,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["authentication",{"_index":242,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["authorization",{"_index":169,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["aware",{"_index":183,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["bash",{"_index":34,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["basic",{"_index":74,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["be",{"_index":87,"pagesPluginContent":{"26":{},"27":{},"29":{}},"name":{},"parent":{}}],["before",{"_index":118,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["behavior",{"_index":223,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["below",{"_index":238,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["better",{"_index":297,"pagesPluginContent":{"27":{}},"name":{"28":{}},"parent":{}}],["bind",{"_index":290,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["bindpolicydecorators",{"_index":4,"pagesPluginContent":{"27":{}},"name":{"7":{}},"parent":{}}],["boring",{"_index":335,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["both",{"_index":275,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["bound",{"_index":271,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["bound.controller.ts",{"_index":274,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["boundpolicydecorators",{"_index":5,"pagesPluginContent":{},"name":{"8":{}},"parent":{"9":{}}}],["boundpolicydecorators.__type",{"_index":7,"pagesPluginContent":{},"name":{},"parent":{"10":{},"11":{}}}],["bug",{"_index":394,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["but",{"_index":193,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["by",{"_index":294,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["calls",{"_index":257,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["can",{"_index":68,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["can't",{"_index":304,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["canactivate",{"_index":404,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["cannot",{"_index":319,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["care",{"_index":191,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["care.controller.ts",{"_index":91,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["casl",{"_index":37,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["casl/commit/467354a0434a6518f52697c7ab46642ed9384f8e",{"_index":400,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["casl/commit/95945423b9d78ecb1353fe6c1a2228d5c9571cec",{"_index":393,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["casl/commit/f92f45e023c36a7fdfebe01851315d839a2f5a9f",{"_index":411,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["casl/compare/78f16a2f9e103be41b9d6a872f547eb54bc0d80e...v0.0.1",{"_index":419,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["casl/compare/v0.0.1...v0.0.2",{"_index":416,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["casl/compare/v0.0.2",{"_index":364,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["caslabilityfactory",{"_index":19,"pagesPluginContent":{"27":{},"28":{}},"name":{"23":{}},"parent":{"24":{}}}],["caslmodule",{"_index":8,"pagesPluginContent":{"26":{}},"name":{"12":{}},"parent":{"13":{},"14":{}}}],["chances",{"_index":326,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["changelog",{"_index":350,"pagesPluginContent":{"29":{}},"name":{"29":{}},"parent":{}}],["changelog/standard",{"_index":358,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["changes",{"_index":352,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["check",{"_index":102,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["checking",{"_index":119,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["checks",{"_index":407,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["class",{"_index":81,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["close",{"_index":155,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["codeblock",{"_index":48,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["commit",{"_index":360,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["compatible",{"_index":26,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["condition",{"_index":261,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["configuration",{"_index":30,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["configure",{"_index":60,"pagesPluginContent":{"26":{},"28":{}},"name":{},"parent":{}}],["constrain",{"_index":339,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["constrained",{"_index":320,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["constraint",{"_index":332,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["constraints",{"_index":298,"pagesPluginContent":{"27":{}},"name":{"28":{}},"parent":{}}],["constructor",{"_index":10,"pagesPluginContent":{},"name":{"14":{}},"parent":{}}],["context",{"_index":248,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["continue",{"_index":177,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["contraints",{"_index":347,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["controller",{"_index":80,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["controllers",{"_index":73,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["correct",{"_index":398,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["course",{"_index":292,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["createfromrequest",{"_index":20,"pagesPluginContent":{},"name":{"24":{}},"parent":{}}],["cumulative",{"_index":258,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["current",{"_index":46,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["declare",{"_index":39,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["declared",{"_index":311,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["decorator",{"_index":82,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["decorators",{"_index":72,"pagesPluginContent":{"26":{},"28":{}},"name":{},"parent":{}}],["define",{"_index":312,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["delegate",{"_index":208,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["dependencies",{"_index":149,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["dependency",{"_index":153,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["depending",{"_index":247,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["directly",{"_index":143,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["do",{"_index":129,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["documented",{"_index":354,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["does",{"_index":150,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["each",{"_index":246,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["either",{"_index":282,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["enjoy",{"_index":346,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["evaluated",{"_index":265,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["even",{"_index":269,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["every",{"_index":337,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["example",{"_index":166,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["exception",{"_index":172,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["execute",{"_index":116,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["external",{"_index":152,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["extract",{"_index":120,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["extraguard1",{"_index":283,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["extraguard2",{"_index":284,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["f92f45e](https://github.com/scitizen/nest",{"_index":410,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["fact",{"_index":194,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["factory",{"_index":64,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["factory.service.ts",{"_index":53,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["far",{"_index":300,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["features",{"_index":387,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["file",{"_index":355,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["first",{"_index":31,"pagesPluginContent":{"26":{},"29":{}},"name":{},"parent":{}}],["fixes",{"_index":395,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["folded",{"_index":104,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["following",{"_index":133,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["for",{"_index":164,"pagesPluginContent":{"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["forbidden",{"_index":174,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["from",{"_index":45,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["further",{"_index":406,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["generate",{"_index":43,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["generating",{"_index":123,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["getting",{"_index":112,"pagesPluginContent":{},"name":{"26":{}},"parent":{}}],["give",{"_index":200,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["great",{"_index":323,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["greatly",{"_index":324,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["group",{"_index":94,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["guard",{"_index":161,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guard](https://github.com/nestjs/passport/blob/6aef921c7566766d0eb9e79d2c8235177c539863/lib/auth.guard.ts#l58",{"_index":196,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards",{"_index":111,"pagesPluginContent":{"26":{},"27":{}},"name":{"27":{}},"parent":{}}],["guards/ability",{"_index":135,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/jwt",{"_index":213,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/naive",{"_index":226,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/naive.controller.ts",{"_index":197,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/naive.guard.ts",{"_index":158,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/passport",{"_index":219,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/recommended",{"_index":296,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guards/recommended.controller.ts#recommended",{"_index":266,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["guardslist",{"_index":18,"pagesPluginContent":{},"name":{"22":{}},"parent":{}}],["guidelines",{"_index":361,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["handle",{"_index":16,"pagesPluginContent":{},"name":{"20":{}},"parent":{}}],["handlers",{"_index":391,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["has",{"_index":286,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["have",{"_index":132,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["he",{"_index":285,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["header",{"_index":170,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["here",{"_index":224,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["hopefully",{"_index":340,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["i'm",{"_index":182,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["icaslrootconfig",{"_index":11,"pagesPluginContent":{},"name":{"15":{}},"parent":{"16":{}}}],["ide",{"_index":328,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["ideal",{"_index":184,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["if",{"_index":92,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["implementation",{"_index":167,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["import",{"_index":54,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["in",{"_index":56,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["individual",{"_index":89,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["informations",{"_index":122,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["initial",{"_index":420,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["injectability",{"_index":0,"pagesPluginContent":{},"name":{"0":{}},"parent":{}}],["install",{"_index":32,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["interceptor`](https://docs.nestjs.com/interceptors",{"_index":188,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["invalid",{"_index":173,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["ipolicy",{"_index":15,"pagesPluginContent":{},"name":{"19":{}},"parent":{"20":{}}}],["is",{"_index":25,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["it",{"_index":61,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["its",{"_index":124,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["join",{"_index":260,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["just",{"_index":293,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["jwt",{"_index":211,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["let's",{"_index":130,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["level",{"_index":99,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["like",{"_index":218,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["link",{"_index":55,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["matching",{"_index":310,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["maybeasyncvalue",{"_index":21,"pagesPluginContent":{},"name":{"25":{}},"parent":{}}],["metadata",{"_index":397,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["method",{"_index":138,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["method1",{"_index":276,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["method2",{"_index":277,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["methods",{"_index":78,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["middleware`](https://docs.nestjs.com/middleware",{"_index":186,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["might",{"_index":141,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["module",{"_index":24,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["more",{"_index":148,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["moreover",{"_index":249,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["most",{"_index":114,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["multiple",{"_index":241,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["myability",{"_index":316,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["naive",{"_index":217,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["naive.controller.ts",{"_index":220,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["naiveguard",{"_index":199,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["naïve",{"_index":136,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["nestjs",{"_index":156,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["nestjs/passport`](https://www.npmjs.com/package/@nestjs/passport",{"_index":195,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["nestjs@^8.0.0",{"_index":28,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["next",{"_index":109,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["next.0",{"_index":417,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.0...v0.0.2",{"_index":413,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.0](https://github.com/scitizen/nest",{"_index":415,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.1",{"_index":414,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.1...v0.0.2",{"_index":385,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.1](https://github.com/scitizen/nest",{"_index":412,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.2",{"_index":386,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.2...v0.0.2",{"_index":381,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.2](https://github.com/scitizen/nest",{"_index":384,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.3",{"_index":382,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.3...v0.0.2",{"_index":377,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.3](https://github.com/scitizen/nest",{"_index":380,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.4",{"_index":378,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.4...v0.0.2",{"_index":374,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.4](https://github.com/scitizen/nest",{"_index":376,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.5",{"_index":375,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.5...v0.0.2",{"_index":371,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.5](https://github.com/scitizen/nest",{"_index":373,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.6",{"_index":372,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.6...v0.0.2",{"_index":365,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.6](https://github.com/scitizen/nest",{"_index":370,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.7",{"_index":366,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["next.7](https://github.com/scitizen/nest",{"_index":363,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["not",{"_index":139,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["notable",{"_index":351,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["note",{"_index":289,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["now",{"_index":69,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["npm",{"_index":35,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["of",{"_index":79,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["on",{"_index":180,"pagesPluginContent":{"27":{},"29":{}},"name":{},"parent":{}}],["or",{"_index":187,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["or.guard",{"_index":401,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["order",{"_index":338,"pagesPluginContent":{"28":{},"29":{}},"name":{},"parent":{}}],["our",{"_index":306,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["owner.controller.ts",{"_index":85,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["page",{"_index":110,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["parameter",{"_index":331,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["part",{"_index":336,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["pass",{"_index":317,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["passes",{"_index":281,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["passport",{"_index":207,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["passport.strategy.ts",{"_index":214,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["placed",{"_index":237,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["policies",{"_index":96,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["policies.guard",{"_index":388,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["policies.ts",{"_index":343,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["policiesguard",{"_index":204,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["policiesmask",{"_index":3,"pagesPluginContent":{"26":{},"27":{}},"name":{"4":{},"5":{},"11":{}},"parent":{"6":{}}}],["policiesmask.usingguard",{"_index":254,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["policy",{"_index":1,"pagesPluginContent":{"26":{},"27":{},"29":{}},"name":{"1":{},"2":{},"10":{}},"parent":{"3":{}}}],["policy.usingguard",{"_index":253,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["policydescriptor",{"_index":13,"pagesPluginContent":{"27":{}},"name":{"17":{}},"parent":{}}],["policydescriptormask",{"_index":14,"pagesPluginContent":{},"name":{"18":{}},"parent":{}}],["possible",{"_index":157,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["prefer",{"_index":251,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["prepare",{"_index":270,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["prepended",{"_index":255,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["presets",{"_index":252,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["problem",{"_index":229,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["project",{"_index":353,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["promises",{"_index":409,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["properly",{"_index":402,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["property",{"_index":178,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["protect",{"_index":76,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["provide",{"_index":262,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["provider",{"_index":41,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["ran",{"_index":239,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["readability",{"_index":235,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["recommanded",{"_index":140,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["recommended",{"_index":144,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["reduce",{"_index":325,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["release",{"_index":421,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["request",{"_index":47,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["require",{"_index":151,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["ressource",{"_index":203,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["retrieval",{"_index":209,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["reusability",{"_index":240,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["role",{"_index":288,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["run",{"_index":278,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["same",{"_index":97,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["say",{"_index":210,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["scitizen/nest",{"_index":36,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["see",{"_index":162,"pagesPluginContent":{"27":{},"29":{}},"name":{},"parent":{}}],["set",{"_index":179,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["setting",{"_index":192,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["setup",{"_index":29,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["should",{"_index":189,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["show",{"_index":127,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["simple",{"_index":267,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["simplepolicy",{"_index":17,"pagesPluginContent":{},"name":{"21":{}},"parent":{}}],["simply",{"_index":345,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["skip",{"_index":142,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["so",{"_index":299,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["solve",{"_index":341,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["some",{"_index":117,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["spec.ts",{"_index":107,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["spec.ts#abilityfactory",{"_index":51,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["spec.ts#appmodule",{"_index":65,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["spec.ts#catcarecontroller",{"_index":90,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["spec.ts#catcontroller",{"_index":100,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["spec.ts#catownercontroller",{"_index":83,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["spec.ts#test",{"_index":105,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["src/ability",{"_index":52,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["src/app.module.ts",{"_index":66,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["src/cat",{"_index":84,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["src/cat.controller.ts",{"_index":101,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["src/controllers/naive.controller.ts",{"_index":198,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/controllers/passport",{"_index":221,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/controllers/recommended.controller.ts",{"_index":268,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/guards/naive.guard.ts",{"_index":159,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/my",{"_index":344,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["src/policies.ts",{"_index":272,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/recommended",{"_index":273,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/strategies/jwt",{"_index":215,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["src/test",{"_index":349,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["src/test.controller.ts",{"_index":334,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["standard",{"_index":356,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["start",{"_index":70,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["started",{"_index":113,"pagesPluginContent":{},"name":{"26":{}},"parent":{}}],["still",{"_index":216,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["stop",{"_index":405,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["strategies",{"_index":243,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["strategy",{"_index":212,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["subject`s",{"_index":308,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["subsequent",{"_index":259,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["succeed",{"_index":205,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["success",{"_index":408,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["suggest",{"_index":329,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["take",{"_index":190,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["test.e2e",{"_index":227,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["test/basic",{"_index":49,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["test/better",{"_index":314,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["test/cats.e2e",{"_index":106,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["test/use",{"_index":134,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["tested",{"_index":291,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["tests",{"_index":103,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["that",{"_index":42,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["that's",{"_index":322,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["the",{"_index":33,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["them",{"_index":201,"pagesPluginContent":{"27":{},"28":{}},"name":{},"parent":{}}],["then",{"_index":38,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["there",{"_index":232,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["they",{"_index":264,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["this",{"_index":23,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["those",{"_index":256,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["through",{"_index":280,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["times",{"_index":115,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["to",{"_index":62,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["type",{"_index":250,"pagesPluginContent":{"27":{},"28":{}},"name":{"28":{}},"parent":{}}],["types",{"_index":313,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/ability",{"_index":330,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/ability.ts",{"_index":315,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/ability.typecheck.e2e",{"_index":321,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/my",{"_index":342,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/test",{"_index":348,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["types/test.controller.ts",{"_index":333,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["typos",{"_index":327,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["unauthorized",{"_index":171,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["usage",{"_index":75,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["use",{"_index":63,"pagesPluginContent":{"26":{},"27":{},"28":{},"29":{}},"name":{"27":{}},"parent":{}}],["use.e2e",{"_index":50,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["used",{"_index":88,"pagesPluginContent":{"26":{}},"name":{},"parent":{}}],["useguards",{"_index":236,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["user",{"_index":121,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["users",{"_index":168,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["using",{"_index":71,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["usingguard",{"_index":2,"pagesPluginContent":{},"name":{"3":{},"6":{}},"parent":{}}],["valid",{"_index":175,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["various",{"_index":95,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["version",{"_index":359,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["version](https://github.com/conventional",{"_index":357,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["wanna",{"_index":222,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["want",{"_index":93,"pagesPluginContent":{"26":{},"27":{}},"name":{},"parent":{}}],["waterfall",{"_index":403,"pagesPluginContent":{"29":{}},"name":{},"parent":{}}],["way",{"_index":128,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["we",{"_index":301,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["well",{"_index":231,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["were",{"_index":302,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["what",{"_index":108,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["what's",{"_index":228,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["will",{"_index":126,"pagesPluginContent":{"27":{},"28":{},"29":{}},"name":{},"parent":{}}],["with",{"_index":27,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{"27":{}},"parent":{}}],["withconfig",{"_index":9,"pagesPluginContent":{},"name":{"13":{}},"parent":{}}],["without",{"_index":146,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["world",{"_index":185,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["yeah",{"_index":181,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["yet",{"_index":305,"pagesPluginContent":{"28":{}},"name":{},"parent":{}}],["you",{"_index":67,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["you're",{"_index":206,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}],["your",{"_index":57,"pagesPluginContent":{"26":{},"27":{},"28":{}},"name":{},"parent":{}}],["yourself",{"_index":295,"pagesPluginContent":{"27":{}},"name":{},"parent":{}}]],"pipeline":[]}} \ No newline at end of file diff --git a/docs/classes/CaslModule.html b/docs/classes/CaslModule.html index 2f4b2784..c548044e 100644 --- a/docs/classes/CaslModule.html +++ b/docs/classes/CaslModule.html @@ -123,7 +123,7 @@

Static withConfig

  • diff --git a/docs/interfaces/CaslAbilityFactory.html b/docs/interfaces/CaslAbilityFactory.html index 20f70438..f59fc502 100644 --- a/docs/interfaces/CaslAbilityFactory.html +++ b/docs/interfaces/CaslAbilityFactory.html @@ -115,7 +115,7 @@

    createFromRequest

  • diff --git a/docs/interfaces/ICaslRootConfig.html b/docs/interfaces/ICaslRootConfig.html index c0add4ca..41412ffa 100644 --- a/docs/interfaces/ICaslRootConfig.html +++ b/docs/interfaces/ICaslRootConfig.html @@ -104,7 +104,7 @@

    abilityFactory

    abilityFactory: Type<CaslAbilityFactory<TAbility>>
    diff --git a/docs/interfaces/IPolicy.html b/docs/interfaces/IPolicy.html index 64340809..a9bbad1b 100644 --- a/docs/interfaces/IPolicy.html +++ b/docs/interfaces/IPolicy.html @@ -115,7 +115,7 @@

    handle

  • diff --git a/docs/modules.html b/docs/modules.html index c33c2c32..7a28e5f4 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -123,7 +123,7 @@

    BoundPolicyDecorators

    BoundPolicyDecorators<TAbility>: { PoliciesMask: PoliciesMask<TAbility>; Policy: Policy<TAbility> }

    Type parameters

    @@ -172,7 +172,7 @@

    GuardsList

    GuardsList: ((CanActivate | Type<CanActivate>)[] | Type<CanActivate>)[]
    @@ -202,7 +202,7 @@

    MaybeAsyncValue

    MaybeAsyncValue<T>: T | Promise<T> | Observable<T>
    @@ -223,7 +223,7 @@

    PolicyDescriptor

    PolicyDescriptor<TAbility>: Type<IPolicy<TAbility>> | IPolicy<TAbility> | ((ability: TAbility) => MaybeAsyncValue<boolean>) | SimplePolicy<TAbility> | boolean
    @@ -256,7 +256,7 @@

    PolicyDescriptorMask

    PolicyDescriptorMask<TAbility>: Record<string, PolicyDescriptor<TAbility>>
    @@ -300,7 +300,7 @@

    SimplePolicy

    SimplePolicy<TAbility>: TAbility extends Ability<infer TAbilityTuple> ? TAbilityTuple extends any ? { action: TAbilityTuple[0]; subject: TAbilityTuple[1] } : never : { action: string; subject: string }
    @@ -333,7 +333,7 @@

    Const InjectAbility

  • @@ -365,7 +365,7 @@

    PoliciesMask

  • @@ -407,7 +407,7 @@

    Policy

  • @@ -449,7 +449,7 @@

    Const bindPolicyDecorat
  • diff --git a/docs/modules/PoliciesMask.html b/docs/modules/PoliciesMask.html index b2d57f66..e895cfd7 100644 --- a/docs/modules/PoliciesMask.html +++ b/docs/modules/PoliciesMask.html @@ -92,7 +92,7 @@

    usingGuard

  • diff --git a/docs/modules/Policy.html b/docs/modules/Policy.html index 6f373b41..7ac3cb70 100644 --- a/docs/modules/Policy.html +++ b/docs/modules/Policy.html @@ -92,7 +92,7 @@

    usingGuard

  • diff --git a/docs/pages/Changelog/CHANGELOG.html b/docs/pages/Changelog/CHANGELOG.html index ad394552..86679e0f 100644 --- a/docs/pages/Changelog/CHANGELOG.html +++ b/docs/pages/Changelog/CHANGELOG.html @@ -75,6 +75,9 @@

    Changelog

    Changelog

    All notable changes to this project will be documented in this file. See standard-version for commit guidelines.

    + +

    0.0.2-next.7 (2021-10-08)

    +

    0.0.2-next.6 (2021-10-08)

    diff --git a/docs/pages/Guides/better-type-constraints.html b/docs/pages/Guides/better-type-constraints.html index c0feb0fb..c757e654 100644 --- a/docs/pages/Guides/better-type-constraints.html +++ b/docs/pages/Guides/better-type-constraints.html @@ -99,7 +99,7 @@

    Better type constraints

    Define the ability type

    Let's configure our ability types:

    -

    From ./test/demo/better-types/ability.ts#1~6

    +

    From ./test/demo/better-types/ability.ts#1~6

    import { Ability } from '@casl/ability';
     
     export type MyAbilities =
    @@ -109,7 +109,7 @@ 

    Define the ability type

    Using MyAbility, we can't pass anything to can or cannot: types are constrained.

    -

    From ./test/demo/better-types/ability.typecheck.e2e-spec.ts#1~12

    +

    From ./test/demo/better-types/ability.typecheck.e2e-spec.ts#1~12

    import { expectTypeOf } from 'expect-type';
     
     import { MyAbility } from './ability';
    @@ -132,7 +132,7 @@ 

    Use the ability type

    With the CaslAbilityFactory

    Let's now use this type in your CaslAbilityFactory:

    -

    From ./src/ability-factory.service.ts

    +

    From ./src/ability-factory.service.ts

    import { AbilityBuilder, PureAbility } from '@casl/ability';
     import { Injectable } from '@nestjs/common';
     
    @@ -158,7 +158,7 @@ 

    With the CaslAbilit

    With decorators

    You can pass your ability as a type parameter to your decorators to constraint your actions and subjects:

    -

    From ./src/test.controller.ts

    +

    From ./src/test.controller.ts

    import { Controller, Get } from '@nestjs/common';
     
     import { Policy } from '@scitizen/nest-casl';
    @@ -183,7 +183,7 @@ 

    With decorators

    But the boring part here is that you have to pass your ability type to every decorator in order to constrain them. Hopefully, you can solve this:

    -

    From ./src/my-policies.ts

    +

    From ./src/my-policies.ts

    import { bindPolicyDecorators } from '@scitizen/nest-casl';
     
     import { MyAbility } from './ability';
    @@ -192,7 +192,7 @@ 

    With decorators

    Then, simply enjoy type contraints !

    -

    From ./src/test-bound.controller.ts

    +

    From ./src/test-bound.controller.ts

    import { Controller, Get } from '@nestjs/common';
     
     import { MyPolicies } from './my-policies';
    diff --git a/docs/pages/Guides/getting-started.html b/docs/pages/Guides/getting-started.html
    index bd7fa643..e5a1f1c3 100644
    --- a/docs/pages/Guides/getting-started.html
    +++ b/docs/pages/Guides/getting-started.html
    @@ -104,7 +104,7 @@ 

    Setup & configuration

    npm install @scitizen/nest-casl
     

    Then, declare a provider that generate a CASL Ability from the current request.

    -

    From ./src/ability-factory.service.ts

    +

    From ./src/ability-factory.service.ts

    @Injectable()
     export class AbilityFactory implements CaslAbilityFactory {
     	// Here, `request` is the express or fastify request. You might get infos from it.
    @@ -119,7 +119,7 @@ 

    Setup & configuration

    Import the CaslModule in your AppModule, and configure it to use your ability factory.

    -

    From ./src/app.module.ts

    +

    From ./src/app.module.ts

    @Module( {
     	imports: [
     		CaslModule.withConfig( ( { abilityFactory: AbilityFactory } ) ),
    @@ -134,7 +134,7 @@ 

    Setup & configuration

    Basic usage

    You can protect all methods of your controller using the Policy class decorator.

    -

    From ./src/cat-owner.controller.ts

    +

    From ./src/cat-owner.controller.ts

    @Controller( '/cat/owner' )
     @Policy( { action: 'rename', subject: 'cat' } )
     export class CatOwnerController {
    @@ -147,7 +147,7 @@ 

    Basic usage

    This decorator can also be used to protect individual methods.

    -

    From ./src/cat-care.controller.ts

    +

    From ./src/cat-care.controller.ts

    @Controller( '/cat/care' )
     export class CatCareController {
     	// Okay, you can feed.
    @@ -167,7 +167,7 @@ 

    Basic usage

    If you want to group various policies in the same decorator at the controller level, use the PoliciesMask decorator.

    -

    From ./src/cat.controller.ts

    +

    From ./src/cat.controller.ts

    @Controller( '/cat' )
     @PoliciesMask( {
     	feed: { action: 'feed', subject: 'cat' },
    @@ -193,7 +193,7 @@ 

    Basic usage

    Check the tests !

    -

    From ./test/cats.e2e-spec.ts

    +

    From ./test/cats.e2e-spec.ts

    describe( 'Basic usage', () => {
     	let app: INestApplication;
     
    diff --git a/docs/pages/Guides/use-with-guards.html b/docs/pages/Guides/use-with-guards.html
    index 32d2420e..88cc2a00 100644
    --- a/docs/pages/Guides/use-with-guards.html
    +++ b/docs/pages/Guides/use-with-guards.html
    @@ -97,7 +97,7 @@ 

    Use with guards

    Most of the times, you want to execute some guards before checking CASL policies, to extract some user informations before generating its abilities.

    This page will show you the various way to do.

    Let's assume you have the following CaslAbilityFactory:

    -

    From ./src/ability-factory.service.ts

    +

    From ./src/ability-factory.service.ts

    import { AbilityBuilder, PureAbility } from '@casl/ability';
     import { Injectable } from '@nestjs/common';
     
    @@ -127,7 +127,7 @@ 

    The naïve approach

    Without any more dependencies

    This method does not require any external dependency, and is as close to NestJS as possible.

    -

    From ./src/guards/naive.guard.ts

    +

    From ./src/guards/naive.guard.ts

    import { CanActivate, ExecutionContext, UnauthorizedException } from '@nestjs/common';
     import { Request } from 'express';
     
    @@ -169,7 +169,7 @@ 

    Without any more dependencies

    Yeah, I'm aware that in an ideal world, a Middleware or an Interceptor should take care of setting the user property on the Request. But fact is that @nestjs/passport does it in a guard

    -

    From ./src/controllers/naive.controller.ts

    +

    From ./src/controllers/naive.controller.ts

    import { Controller, Get, UseGuards } from '@nestjs/common';
     
     import { Policy } from '@scitizen/nest-casl';
    @@ -198,7 +198,7 @@ 

    Without any more dependencies

    Using @nestjs/passport

    If you're using passport, you can delegate the user retrieval. Let's say you have a JWT passport strategy.

    -

    From ./src/strategies/jwt-passport.strategy.ts

    +

    From ./src/strategies/jwt-passport.strategy.ts

    import { Injectable } from '@nestjs/common';
     import { PassportStrategy } from '@nestjs/passport';
     import { ExtractJwt, Strategy, StrategyOptions } from 'passport-jwt';
    @@ -220,7 +220,7 @@ 

    Using @nestjs

    Still using the naive approach, you can then declare the controller like this:

    -

    From ./src/controllers/passport-naive.controller.ts

    +

    From ./src/controllers/passport-naive.controller.ts

    import { Controller, Get, UseGuards } from '@nestjs/common';
     import { AuthGuard } from '@nestjs/passport';
     
    @@ -241,7 +241,7 @@ 

    Using @nestjs

    The tests

    Wanna see the behavior as tests ? Here you are !

    -

    From ./test/demo/use-with-guards/naive-test.e2e-spec.ts#1~77

    +

    From ./test/demo/use-with-guards/naive-test.e2e-spec.ts#1~77

    import { HttpStatus, INestApplication } from '@nestjs/common';
     import { JwtModule, JwtService } from '@nestjs/jwt';
     import { Test } from '@nestjs/testing';
    @@ -333,7 +333,7 @@ 

    The recommended approach

    About readability

    You can use Policy.usingGuard or PoliciesMask.usingGuard to prepended guards to the decorator factory. Those calls are cumulative, and you can do multiple subsequent calls to join guards using an and condition. If you provide an array of guards, they be evaluated using an or condition.

    -

    From ./src/controllers/recommended.controller.ts

    +

    From ./src/controllers/recommended.controller.ts

    @Controller( '/recommended' )
     @Policy( { action: 'admin', subject: 'something' } )
     	.usingGuard( AuthGuard( 'jwt' ) ) // The policy will run the guard before doing its own checks.
    @@ -349,14 +349,14 @@ 

    About readability

    About reusability

    You can even prepare a policy decorator with guards or PolicyDescriptor:

    -

    From ./src/policies.ts

    +

    From ./src/policies.ts

    export const AdminViaJwtPolicy = Policy( { action: 'admin', subject: 'something' } )
     	.usingGuard( AuthGuard( 'jwt' ) );
     export const ViaJwtPolicy = Policy.usingGuard( AuthGuard( 'jwt' ) );
     

    Then, use those presets in your controller:

    -

    From ./src/recommended-bound.controller.ts

    +

    From ./src/recommended-bound.controller.ts

    @Injectable()
     export class ExtraGuard1 implements CanActivate {
     	public canActivate( context: ExecutionContext ): boolean {
    @@ -404,7 +404,7 @@ 

    About reusability

    The tests

    This is tested, of course. Just see by yourself.

    -

    From ./test/demo/use-with-guards/recommended-test.e2e-spec.ts#1~90

    +

    From ./test/demo/use-with-guards/recommended-test.e2e-spec.ts#1~90

    import { HttpStatus, INestApplication } from '@nestjs/common';
     import { JwtModule, JwtService } from '@nestjs/jwt';
     import { Test } from '@nestjs/testing';
    diff --git a/package-lock.json b/package-lock.json
    index e65c85f3..7b1aedf5 100644
    --- a/package-lock.json
    +++ b/package-lock.json
    @@ -1,6 +1,6 @@
     {
       "name": "@scitizen/nest-casl",
    -  "version": "0.0.2-next.6",
    +  "version": "0.0.2-next.7",
       "lockfileVersion": 1,
       "requires": true,
       "dependencies": {
    diff --git a/package.json b/package.json
    index 50de1fa4..5f06b445 100644
    --- a/package.json
    +++ b/package.json
    @@ -1,6 +1,6 @@
     {
       "name": "@scitizen/nest-casl",
    -  "version": "0.0.2-next.6",
    +  "version": "0.0.2-next.7",
       "description": "A module for managing authorization in your nest application, using casl.",
       "license": "MIT",
       "engines": {