[{"data":1,"prerenderedAt":842},["ShallowReactive",2],{"navigation_docs":3,"-guides-role-based-access":208,"-guides-role-based-access-surround":837},[4,42,68,115,136,157],{"title":5,"path":6,"stem":7,"children":8,"icon":11},"Getting Started","\u002Fgetting-started","1.getting-started\u002F0.index",[9,12,17,22,27,32,37],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-sparkles",{"title":13,"path":14,"stem":15,"icon":16},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Configuration","\u002Fgetting-started\u002Fconfiguration","1.getting-started\u002F2.configuration","i-lucide-settings",{"title":23,"path":24,"stem":25,"icon":26},"Client Setup","\u002Fgetting-started\u002Fclient-setup","1.getting-started\u002F3.client-setup","i-lucide-monitor",{"title":28,"path":29,"stem":30,"icon":31},"Type Augmentation","\u002Fgetting-started\u002Ftype-augmentation","1.getting-started\u002F4.type-augmentation","i-lucide-type",{"title":33,"path":34,"stem":35,"icon":36},"Schema Generation (NuxtHub)","\u002Fgetting-started\u002Fschema-generation","1.getting-started\u002F5.schema-generation","i-lucide-database",{"title":38,"path":39,"stem":40,"icon":41},"How It Works","\u002Fgetting-started\u002Fhow-it-works","1.getting-started\u002F6.how-it-works","i-lucide-workflow",{"title":43,"path":44,"stem":45,"children":46,"page":67},"Core Concepts","\u002Fcore-concepts","2.core-concepts",[47,51,55,59,63],{"title":48,"path":49,"stem":50},"serverAuth()","\u002Fcore-concepts\u002Fserver-auth","2.core-concepts\u002F1.server-auth",{"title":52,"path":53,"stem":54},"Sessions","\u002Fcore-concepts\u002Fsessions","2.core-concepts\u002F2.sessions",{"title":56,"path":57,"stem":58},"Route Protection","\u002Fcore-concepts\u002Froute-protection","2.core-concepts\u002F3.route-protection",{"title":60,"path":61,"stem":62},"Auto‑Imports and Aliases","\u002Fcore-concepts\u002Fauto-imports-aliases","2.core-concepts\u002F4.auto-imports-aliases",{"title":64,"path":65,"stem":66},"Security & Caveats","\u002Fcore-concepts\u002Fsecurity-caveats","2.core-concepts\u002F5.security-caveats",false,{"title":69,"path":70,"stem":71,"children":72,"page":67},"Guides","\u002Fguides","3.guides",[73,77,82,86,90,94,99,103,107,111],{"title":74,"path":75,"stem":76},"Role‑Based Access","\u002Fguides\u002Frole-based-access","3.guides\u002F1.role-based-access",{"title":78,"path":79,"stem":80,"icon":81},"Setup diagnostics","\u002Fguides\u002Fdiagnostics","3.guides\u002F10.diagnostics","i-lucide-circle-alert",{"title":83,"path":84,"stem":85},"OAuth Providers","\u002Fguides\u002Foauth-providers","3.guides\u002F2.oauth-providers",{"title":87,"path":88,"stem":89},"Custom Database","\u002Fguides\u002Fcustom-database","3.guides\u002F3.custom-database",{"title":91,"path":92,"stem":93},"Database-less Mode","\u002Fguides\u002Fdatabase-less-mode","3.guides\u002F4.database-less-mode",{"title":95,"path":96,"stem":97,"icon":98},"External Auth Backend","\u002Fguides\u002Fexternal-auth-backend","3.guides\u002F5.external-auth-backend","i-lucide-server",{"title":100,"path":101,"stem":102},"Migrating from nuxt-auth-utils","\u002Fguides\u002Fmigrate-from-nuxt-auth-utils","3.guides\u002F6.migrate-from-nuxt-auth-utils",{"title":104,"path":105,"stem":106},"Two-Factor Authentication (TOTP + Backup Codes)","\u002Fguides\u002Ftwo-factor-auth","3.guides\u002F7.two-factor-auth",{"title":108,"path":109,"stem":110},"Testing","\u002Fguides\u002Ftesting","3.guides\u002F8.testing",{"title":112,"path":113,"stem":114},"Production Deployment","\u002Fguides\u002Fproduction-deployment","3.guides\u002F9.production-deployment",{"title":116,"path":117,"stem":118,"children":119,"page":67},"Integrations","\u002Fintegrations","4.integrations",[120,124,128,132],{"title":121,"path":122,"stem":123},"NuxtHub","\u002Fintegrations\u002Fnuxthub","4.integrations\u002F1.nuxthub",{"title":125,"path":126,"stem":127},"DevTools","\u002Fintegrations\u002Fdevtools","4.integrations\u002F2.devtools",{"title":129,"path":130,"stem":131},"Convex","\u002Fintegrations\u002Fconvex","4.integrations\u002F3.convex",{"title":133,"path":134,"stem":135},"i18n","\u002Fintegrations\u002Fi18n","4.integrations\u002F4.i18n",{"title":137,"path":138,"stem":139,"children":140,"page":67},"API Reference","\u002Fapi","5.api",[141,145,149,153],{"title":142,"path":143,"stem":144},"Composables","\u002Fapi\u002Fcomposables","5.api\u002F1.composables",{"title":146,"path":147,"stem":148},"Server Utilities","\u002Fapi\u002Fserver-utils","5.api\u002F2.server-utils",{"title":150,"path":151,"stem":152},"Components","\u002Fapi\u002Fcomponents","5.api\u002F3.components",{"title":154,"path":155,"stem":156},"Types","\u002Fapi\u002Ftypes","5.api\u002F4.types",{"title":158,"path":159,"stem":160,"children":161,"icon":81},"Errors","\u002Ferrors","6.errors\u002F0.index",[162,164,168,172,176,180,184,188,192,196,200,204],{"title":163,"path":159,"stem":160},"Overview",{"title":165,"path":166,"stem":167},"Auth configuration failed to load","\u002Ferrors\u002Fnuxt-auth-config-load-failed","6.errors\u002Fnuxt-auth-config-load-failed",{"title":169,"path":170,"stem":171},"Schema generator returned no code","\u002Ferrors\u002Fnuxt-auth-empty-schema","6.errors\u002Fnuxt-auth-empty-schema",{"title":173,"path":174,"stem":175},"Invalid server auth config export","\u002Ferrors\u002Fnuxt-auth-invalid-config-export","6.errors\u002Fnuxt-auth-invalid-config-export",{"title":177,"path":178,"stem":179},"Auth plugin path must be absolute","\u002Ferrors\u002Fnuxt-auth-invalid-plugin-source","6.errors\u002Fnuxt-auth-invalid-plugin-source",{"title":181,"path":182,"stem":183},"Missing auth configuration","\u002Ferrors\u002Fnuxt-auth-missing-config","6.errors\u002Fnuxt-auth-missing-config",{"title":185,"path":186,"stem":187},"NuxtHub database alias is missing","\u002Ferrors\u002Fnuxt-auth-missing-hub-db","6.errors\u002Fnuxt-auth-missing-hub-db",{"title":189,"path":190,"stem":191},"No database provider is enabled","\u002Ferrors\u002Fnuxt-auth-no-database-provider","6.errors\u002Fnuxt-auth-no-database-provider",{"title":193,"path":194,"stem":195},"Auth schema generation failed","\u002Ferrors\u002Fnuxt-auth-schema-generation-failed","6.errors\u002Fnuxt-auth-schema-generation-failed",{"title":197,"path":198,"stem":199},"Custom session storage is missing","\u002Ferrors\u002Fnuxt-auth-schema-storage-required","6.errors\u002Fnuxt-auth-schema-storage-required",{"title":201,"path":202,"stem":203},"Secondary storage in client-only mode","\u002Ferrors\u002Fnuxt-auth-storage-client-only","6.errors\u002Fnuxt-auth-storage-client-only",{"title":205,"path":206,"stem":207},"Unsupported database dialect","\u002Ferrors\u002Fnuxt-auth-unsupported-dialect","6.errors\u002Fnuxt-auth-unsupported-dialect",{"id":209,"title":74,"body":210,"description":831,"extension":832,"links":833,"meta":834,"navigation":322,"path":75,"seo":835,"stem":76,"__hash__":836},"docs\u002F3.guides\u002F1.role-based-access.md",{"type":211,"value":212,"toc":822},"minimark",[213,226,231,417,421,470,474,552,556,579,656,660,671,676,679,818],[214,215,216,217,221,222,225],"p",{},"Use this guide when your Better Auth user shape includes fields such as ",[218,219,220],"code",{},"role",", ",[218,223,224],{},"teamRole",", or custom authorization flags and you want to use them in route rules or server checks.",[227,228,230],"h2",{"id":229},"with-admin-plugin","With Admin Plugin",[232,233,239],"pre",{"className":234,"code":235,"filename":236,"language":237,"meta":238,"style":238},"language-ts shiki shiki-themes one-light synthwave-84 synthwave-84","import { admin } from 'better-auth\u002Fplugins'\nimport { defineServerAuth } from '@nuxtjs\u002Fbetter-auth\u002Fconfig'\nexport default defineServerAuth({ plugins: [admin()] })\n\n\u002F\u002F nuxt.config.ts - role is now typed!\nrouteRules: {\n  '\u002Fadmin\u002F**': { auth: { user: { role: 'admin' } } },\n  '\u002Fstaff\u002F**': { auth: { user: { role: ['admin', 'moderator'] } } },\n}\n","server\u002Fauth.config.ts","ts","",[218,240,241,268,285,317,324,331,341,374,411],{"__ignoreMap":238},[242,243,246,250,254,258,261,264],"span",{"class":244,"line":245},"line",1,[242,247,249],{"class":248},"sqe1H","import",[242,251,253],{"class":252},"s17Py"," { ",[242,255,257],{"class":256},"sYvLG","admin",[242,259,260],{"class":252}," } ",[242,262,263],{"class":248},"from",[242,265,267],{"class":266},"sPAZv"," 'better-auth\u002Fplugins'\n",[242,269,271,273,275,278,280,282],{"class":244,"line":270},2,[242,272,249],{"class":248},[242,274,253],{"class":252},[242,276,277],{"class":256},"defineServerAuth",[242,279,260],{"class":252},[242,281,263],{"class":248},[242,283,284],{"class":266}," '@nuxtjs\u002Fbetter-auth\u002Fconfig'\n",[242,286,288,291,295,299,302,305,309,312,314],{"class":244,"line":287},3,[242,289,290],{"class":248},"export",[242,292,294],{"class":293},"sKg8T"," default",[242,296,298],{"class":297},"sfT9l"," defineServerAuth",[242,300,301],{"class":252},"({ ",[242,303,304],{"class":256},"plugins",[242,306,308],{"class":307},"sVnqq",":",[242,310,311],{"class":252}," [",[242,313,257],{"class":297},[242,315,316],{"class":252},"()] })\n",[242,318,320],{"class":244,"line":319},4,[242,321,323],{"emptyLinePlaceholder":322},true,"\n",[242,325,327],{"class":244,"line":326},5,[242,328,330],{"class":329},"st7cf","\u002F\u002F nuxt.config.ts - role is now typed!\n",[242,332,334,338],{"class":244,"line":333},6,[242,335,337],{"class":336},"sivOE","routeRules",[242,339,340],{"class":252},": {\n",[242,342,344,347,350,353,355,357,360,362,364,366,368,371],{"class":244,"line":343},7,[242,345,346],{"class":266},"  '\u002Fadmin\u002F**'",[242,348,349],{"class":252},": { ",[242,351,352],{"class":256},"auth",[242,354,308],{"class":307},[242,356,253],{"class":252},[242,358,359],{"class":256},"user",[242,361,308],{"class":307},[242,363,253],{"class":252},[242,365,220],{"class":256},[242,367,308],{"class":307},[242,369,370],{"class":266}," 'admin'",[242,372,373],{"class":252}," } } },\n",[242,375,377,380,382,384,386,388,390,392,394,396,398,400,403,405,408],{"class":244,"line":376},8,[242,378,379],{"class":266},"  '\u002Fstaff\u002F**'",[242,381,349],{"class":252},[242,383,352],{"class":256},[242,385,308],{"class":307},[242,387,253],{"class":252},[242,389,359],{"class":256},[242,391,308],{"class":307},[242,393,253],{"class":252},[242,395,220],{"class":256},[242,397,308],{"class":307},[242,399,311],{"class":252},[242,401,402],{"class":266},"'admin'",[242,404,221],{"class":252},[242,406,407],{"class":266},"'moderator'",[242,409,410],{"class":252},"] } } },\n",[242,412,414],{"class":244,"line":413},9,[242,415,416],{"class":252},"}\n",[227,418,420],{"id":419},"with-organization-plugin","With Organization Plugin",[232,422,425],{"className":234,"code":423,"filename":424,"language":237,"meta":238,"style":238},"\u002F\u002F Works the same way with any plugin fields\nrouteRules: {\n  '\u002Fteam\u002F**': { auth: { user: { teamRole: 'owner' } } },\n}\n","nuxt.config.ts",[218,426,427,432,438,466],{"__ignoreMap":238},[242,428,429],{"class":244,"line":245},[242,430,431],{"class":329},"\u002F\u002F Works the same way with any plugin fields\n",[242,433,434,436],{"class":244,"line":270},[242,435,337],{"class":336},[242,437,340],{"class":252},[242,439,440,443,445,447,449,451,453,455,457,459,461,464],{"class":244,"line":287},[242,441,442],{"class":266},"  '\u002Fteam\u002F**'",[242,444,349],{"class":252},[242,446,352],{"class":256},[242,448,308],{"class":307},[242,450,253],{"class":252},[242,452,359],{"class":256},[242,454,308],{"class":307},[242,456,253],{"class":252},[242,458,224],{"class":256},[242,460,308],{"class":307},[242,462,463],{"class":266}," 'owner'",[242,465,373],{"class":252},[242,467,468],{"class":244,"line":319},[242,469,416],{"class":252},[227,471,473],{"id":472},"with-custom-fields","With Custom Fields",[232,475,477],{"className":234,"code":476,"filename":424,"language":237,"meta":238,"style":238},"\u002F\u002F Any field on AuthUser works\nrouteRules: {\n  '\u002Fpremium\u002F**': { auth: { user: { isPremium: true } } },\n  '\u002Fverified\u002F**': { auth: { user: { emailVerified: true } } },\n}\n",[218,478,479,484,490,520,548],{"__ignoreMap":238},[242,480,481],{"class":244,"line":245},[242,482,483],{"class":329},"\u002F\u002F Any field on AuthUser works\n",[242,485,486,488],{"class":244,"line":270},[242,487,337],{"class":336},[242,489,340],{"class":252},[242,491,492,495,497,499,501,503,505,507,509,512,514,518],{"class":244,"line":287},[242,493,494],{"class":266},"  '\u002Fpremium\u002F**'",[242,496,349],{"class":252},[242,498,352],{"class":256},[242,500,308],{"class":307},[242,502,253],{"class":252},[242,504,359],{"class":256},[242,506,308],{"class":307},[242,508,253],{"class":252},[242,510,511],{"class":256},"isPremium",[242,513,308],{"class":307},[242,515,517],{"class":516},"s3ZNE"," true",[242,519,373],{"class":252},[242,521,522,525,527,529,531,533,535,537,539,542,544,546],{"class":244,"line":319},[242,523,524],{"class":266},"  '\u002Fverified\u002F**'",[242,526,349],{"class":252},[242,528,352],{"class":256},[242,530,308],{"class":307},[242,532,253],{"class":252},[242,534,359],{"class":256},[242,536,308],{"class":307},[242,538,253],{"class":252},[242,540,541],{"class":256},"emailVerified",[242,543,308],{"class":307},[242,545,517],{"class":516},[242,547,373],{"class":252},[242,549,550],{"class":244,"line":326},[242,551,416],{"class":252},[227,553,555],{"id":554},"matching-logic","Matching Logic",[557,558,559,567,573],"ul",{},[560,561,562,566],"li",{},[563,564,565],"strong",{},"Single value",": exact match required",[560,568,569,572],{},[563,570,571],{},"Array",": OR logic (user field must be one of the values)",[560,574,575,578],{},[563,576,577],{},"Multiple fields",": AND logic (all must match)",[232,580,582],{"className":234,"code":581,"language":237,"meta":238,"style":238},"\u002F\u002F Must be admin AND verified\n{ auth: { user: { role: 'admin', emailVerified: true } } }\n\n\u002F\u002F Must be admin OR moderator\n{ auth: { user: { role: ['admin', 'moderator'] } } }\n",[218,583,584,589,621,625,630],{"__ignoreMap":238},[242,585,586],{"class":244,"line":245},[242,587,588],{"class":329},"\u002F\u002F Must be admin AND verified\n",[242,590,591,594,596,598,600,602,604,607,609,611,613,615,618],{"class":244,"line":270},[242,592,593],{"class":252},"{ ",[242,595,352],{"class":336},[242,597,349],{"class":252},[242,599,359],{"class":336},[242,601,349],{"class":252},[242,603,220],{"class":336},[242,605,606],{"class":252},": ",[242,608,402],{"class":266},[242,610,221],{"class":252},[242,612,541],{"class":336},[242,614,606],{"class":252},[242,616,617],{"class":516},"true",[242,619,620],{"class":252}," } } }\n",[242,622,623],{"class":244,"line":287},[242,624,323],{"emptyLinePlaceholder":322},[242,626,627],{"class":244,"line":319},[242,628,629],{"class":329},"\u002F\u002F Must be admin OR moderator\n",[242,631,632,634,636,638,640,642,644,647,649,651,653],{"class":244,"line":326},[242,633,593],{"class":252},[242,635,352],{"class":336},[242,637,349],{"class":252},[242,639,359],{"class":336},[242,641,349],{"class":252},[242,643,220],{"class":336},[242,645,646],{"class":252},": [",[242,648,402],{"class":266},[242,650,221],{"class":252},[242,652,407],{"class":266},[242,654,655],{"class":252},"] } } }\n",[227,657,659],{"id":658},"complex-logic","Complex Logic",[214,661,662,663,666,667,670],{},"For complex authorization, use custom middleware or ",[218,664,665],{},"requireUserSession"," with a ",[218,668,669],{},"rule"," callback.",[672,673,675],"h3",{"id":674},"complex-authorization-with-rule-callbacks","Complex Authorization with Rule Callbacks",[214,677,678],{},"For authorization logic that can't be expressed with field matching:",[232,680,683],{"className":234,"code":681,"filename":682,"language":237,"meta":238,"style":238},"export default defineEventHandler(async (event) => {\n  await requireUserSession(event, {\n    rule: (session) => {\n      \u002F\u002F User must have 'reports:read' permission\n      return session.user.permissions?.includes('reports:read')\n    }\n  })\n\n  return getReports()\n})\n","server\u002Fapi\u002Freports.ts",[218,684,685,716,731,749,754,787,792,797,801,812],{"__ignoreMap":238},[242,686,687,689,691,694,697,700,703,707,710,713],{"class":244,"line":245},[242,688,290],{"class":248},[242,690,294],{"class":293},[242,692,693],{"class":297}," defineEventHandler",[242,695,696],{"class":252},"(",[242,698,699],{"class":248},"async",[242,701,702],{"class":252}," (",[242,704,706],{"class":705},"sgisi","event",[242,708,709],{"class":252},") ",[242,711,712],{"class":248},"=>",[242,714,715],{"class":252}," {\n",[242,717,718,721,724,726,728],{"class":244,"line":270},[242,719,720],{"class":248},"  await",[242,722,723],{"class":297}," requireUserSession",[242,725,696],{"class":252},[242,727,706],{"class":256},[242,729,730],{"class":252},", {\n",[242,732,733,736,738,740,743,745,747],{"class":244,"line":287},[242,734,735],{"class":297},"    rule",[242,737,308],{"class":307},[242,739,702],{"class":252},[242,741,742],{"class":705},"session",[242,744,709],{"class":252},[242,746,712],{"class":248},[242,748,715],{"class":252},[242,750,751],{"class":244,"line":319},[242,752,753],{"class":329},"      \u002F\u002F User must have 'reports:read' permission\n",[242,755,756,759,763,766,768,770,773,776,779,781,784],{"class":244,"line":326},[242,757,758],{"class":248},"      return",[242,760,762],{"class":761},"svFNh"," session",[242,764,765],{"class":252},".",[242,767,359],{"class":256},[242,769,765],{"class":252},[242,771,772],{"class":256},"permissions",[242,774,775],{"class":252},"?.",[242,777,778],{"class":297},"includes",[242,780,696],{"class":252},[242,782,783],{"class":266},"'reports:read'",[242,785,786],{"class":252},")\n",[242,788,789],{"class":244,"line":333},[242,790,791],{"class":252},"    }\n",[242,793,794],{"class":244,"line":343},[242,795,796],{"class":252},"  })\n",[242,798,799],{"class":244,"line":376},[242,800,323],{"emptyLinePlaceholder":322},[242,802,803,806,809],{"class":244,"line":413},[242,804,805],{"class":248},"  return",[242,807,808],{"class":297}," getReports",[242,810,811],{"class":252},"()\n",[242,813,815],{"class":244,"line":814},10,[242,816,817],{"class":252},"})\n",[819,820,821],"style",{},"html pre.shiki code .sqe1H, html code.shiki .sqe1H{--shiki-light:#A626A4;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .s17Py, html code.shiki .s17Py{--shiki-light:#383A42;--shiki-default:#BBBBBB;--shiki-dark:#BBBBBB}html pre.shiki code .sYvLG, html code.shiki .sYvLG{--shiki-light:#E45649;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}html pre.shiki code .sPAZv, html code.shiki .sPAZv{--shiki-light:#50A14F;--shiki-default:#FF8B39;--shiki-dark:#FF8B39}html pre.shiki code .sKg8T, html code.shiki .sKg8T{--shiki-light:#E45649;--shiki-default:#FEDE5D;--shiki-dark:#FEDE5D}html pre.shiki code .sfT9l, html code.shiki .sfT9l{--shiki-light:#4078F2;--shiki-default:#36F9F6;--shiki-dark:#36F9F6}html pre.shiki code .sVnqq, html code.shiki .sVnqq{--shiki-light:#0184BC;--shiki-default:#B6B1B1;--shiki-dark:#B6B1B1}html pre.shiki code .st7cf, html code.shiki .st7cf{--shiki-light:#A0A1A7;--shiki-light-font-style:italic;--shiki-default:#848BBD;--shiki-default-font-style:italic;--shiki-dark:#848BBD;--shiki-dark-font-style:italic}html pre.shiki code .sivOE, html code.shiki .sivOE{--shiki-light:#383A42;--shiki-default:#FE4450;--shiki-dark:#FE4450}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s3ZNE, html code.shiki .s3ZNE{--shiki-light:#986801;--shiki-default:#F97E72;--shiki-dark:#F97E72}html pre.shiki code .sgisi, html code.shiki .sgisi{--shiki-light:#383A42;--shiki-light-font-style:inherit;--shiki-default:#FF7EDB;--shiki-default-font-style:italic;--shiki-dark:#FF7EDB;--shiki-dark-font-style:italic}html pre.shiki code .svFNh, html code.shiki .svFNh{--shiki-light:#383A42;--shiki-default:#FF7EDB;--shiki-dark:#FF7EDB}",{"title":238,"searchDepth":270,"depth":270,"links":823},[824,825,826,827,828],{"id":229,"depth":270,"text":230},{"id":419,"depth":270,"text":420},{"id":472,"depth":270,"text":473},{"id":554,"depth":270,"text":555},{"id":658,"depth":270,"text":659,"children":829},[830],{"id":674,"depth":287,"text":675},"Protect routes using generic field matching on AuthUser.","md",null,{},{"title":74,"description":831},"DWMeaQK36qYhGhiDzIyel5Hq9aABRF5L5QODNypimU8",[838,840],{"title":64,"path":65,"stem":66,"description":839,"children":-1},"What is enforced where, and what you should not assume.",{"title":78,"path":79,"stem":80,"description":841,"icon":81,"children":-1},"Resolve module setup and schema generation failures using their diagnostic codes.",1791073728693]