[{"data":1,"prerenderedAt":545},["ShallowReactive",2],{"navigation":3,"\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fteams":124,"\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fteams-surround":540},[4,23],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","\u002Fgetting-started","1.getting-started\u002F1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-tabler-home",{"title":13,"path":14,"stem":15,"icon":16},"Manifest","\u002Fgetting-started\u002Fmanifest","1.getting-started\u002F2.manifest","i-tabler-file-diff",{"title":18,"path":19,"stem":20,"icon":21},"Contributing","\u002Fgetting-started\u002Fcontributing","1.getting-started\u002F3.contributing","i-tabler-git-fork",false,{"title":24,"path":25,"stem":26,"children":27,"icon":30},"Packages","\u002Fpackages","2.packages\u002F1.index",[28,31],{"title":29,"path":25,"stem":26,"icon":30},"Overview","i-tabler-packages",{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":22},"AdonisJS Permission","i-tabler-shield-lock","\u002Fpackages\u002Fadonisjs-permission","2.packages\u002Fadonisjs-permission",[37,56,87,113],{"title":5,"icon":38,"path":39,"stem":40,"children":41,"page":22},"i-tabler-rocket","\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started","2.packages\u002Fadonisjs-permission\u002F1.getting-started",[42,46,51],{"title":10,"path":43,"stem":44,"icon":45},"\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started\u002Fintroduction","2.packages\u002Fadonisjs-permission\u002F1.getting-started\u002F1.introduction","i-tabler-book",{"title":47,"path":48,"stem":49,"icon":50},"Installation","\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started\u002Finstallation","2.packages\u002Fadonisjs-permission\u002F1.getting-started\u002F2.installation","i-tabler-download",{"title":52,"path":53,"stem":54,"icon":55},"Configuration","\u002Fpackages\u002Fadonisjs-permission\u002Fgetting-started\u002Fconfiguration","2.packages\u002Fadonisjs-permission\u002F1.getting-started\u002F3.configuration","i-tabler-settings",{"title":57,"icon":58,"path":59,"stem":60,"children":61,"page":22},"Basic Usage","i-tabler-shield-check","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage","2.packages\u002Fadonisjs-permission\u002F2.basic-usage",[62,67,72,77,82],{"title":63,"path":64,"stem":65,"icon":66},"Roles & Permissions","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Froles-and-permissions","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F1.roles-and-permissions","i-tabler-users",{"title":68,"path":69,"stem":70,"icon":71},"Checking Access","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fchecking","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F2.checking","i-tabler-checks",{"title":73,"path":74,"stem":75,"icon":76},"Middleware","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fmiddleware","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F3.middleware","i-tabler-route",{"title":78,"path":79,"stem":80,"icon":81},"Wildcard Permissions","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fwildcard-permissions","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F4.wildcard-permissions","i-tabler-asterisk",{"title":83,"path":84,"stem":85,"icon":86},"Catalog & Sync","\u002Fpackages\u002Fadonisjs-permission\u002Fbasic-usage\u002Fcatalog","2.packages\u002Fadonisjs-permission\u002F2.basic-usage\u002F5.catalog","i-tabler-refresh",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":22},"Advanced","i-tabler-tool","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced","2.packages\u002Fadonisjs-permission\u002F3.advanced",[93,98,103,108],{"title":94,"path":95,"stem":96,"icon":97},"Teams","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fteams","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F1.teams","i-tabler-building",{"title":99,"path":100,"stem":101,"icon":102},"Super-Admin","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fsuper-admin","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F2.super-admin","i-tabler-crown",{"title":104,"path":105,"stem":106,"icon":107},"Events","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fevents","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F3.events","i-tabler-radio",{"title":109,"path":110,"stem":111,"icon":112},"Cache","\u002Fpackages\u002Fadonisjs-permission\u002Fadvanced\u002Fcache","2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F4.cache","i-tabler-database",{"title":114,"icon":115,"path":116,"stem":117,"children":118,"page":22},"Upgrading","i-tabler-circle-arrow-up","\u002Fpackages\u002Fadonisjs-permission\u002Fupgrading","2.packages\u002Fadonisjs-permission\u002F4.upgrading",[119],{"title":120,"path":121,"stem":122,"icon":123},"From adonis-lucid-permission","\u002Fpackages\u002Fadonisjs-permission\u002Fupgrading\u002Ffrom-adonis-lucid-permission","2.packages\u002Fadonisjs-permission\u002F4.upgrading\u002F1.from-adonis-lucid-permission","i-tabler-git-compare",{"id":125,"title":94,"body":126,"description":534,"extension":535,"meta":536,"navigation":537,"path":95,"seo":538,"stem":96,"__hash__":539},"docs\u002F2.packages\u002Fadonisjs-permission\u002F3.advanced\u002F1.teams.md",{"type":127,"value":128,"toc":531},"minimark",[129,143,223,233,238,244,347,350,459,462,511,521,527],[130,131,132,133,137,138,142],"p",{},"Enable teams ",[134,135,136],"strong",{},"before"," running the migrations (or choose it in ",[139,140,141],"code",{},"node ace configure --teams","):",[144,145,151],"pre",{"className":146,"code":147,"filename":148,"language":149,"meta":150,"style":150},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","defineConfig({\n  \u002F\u002F ...\n  teams: true,\n  teamForeignKey: 'team_id',\n})\n","config\u002Fpermissions.ts","ts","",[139,152,153,170,177,194,214],{"__ignoreMap":150},[154,155,158,162,166],"span",{"class":156,"line":157},"line",1,[154,159,161],{"class":160},"s2Zo4","defineConfig",[154,163,165],{"class":164},"sTEyZ","(",[154,167,169],{"class":168},"sMK4o","{\n",[154,171,173],{"class":156,"line":172},2,[154,174,176],{"class":175},"sHwdD","  \u002F\u002F ...\n",[154,178,180,184,187,191],{"class":156,"line":179},3,[154,181,183],{"class":182},"swJcz","  teams",[154,185,186],{"class":168},":",[154,188,190],{"class":189},"sfNiH"," true",[154,192,193],{"class":168},",\n",[154,195,197,200,202,205,209,212],{"class":156,"line":196},4,[154,198,199],{"class":182},"  teamForeignKey",[154,201,186],{"class":168},[154,203,204],{"class":168}," '",[154,206,208],{"class":207},"sfazB","team_id",[154,210,211],{"class":168},"'",[154,213,193],{"class":168},[154,215,217,220],{"class":156,"line":216},5,[154,218,219],{"class":168},"}",[154,221,222],{"class":164},")\n",[130,224,225,226,228,229,232],{},"Roles and the pivot tables get a nullable ",[139,227,208],{}," column. A ",[139,230,231],{},"null"," team means \"global\".",[234,235,237],"h2",{"id":236},"selecting-the-team","Selecting the team",[130,239,240,241,186],{},"Per call, using ",[139,242,243],{},"forTeam()",[144,245,247],{"className":146,"code":246,"language":149,"meta":150,"style":150},"await user.forTeam(teamId).assignRole('admin')\nawait user.forTeam(teamId).can('manage billing')\nawait user.forTeam(null).hasRole('admin') \u002F\u002F global scope\n",[139,248,249,283,311],{"__ignoreMap":150},[154,250,251,255,258,261,264,267,269,272,274,276,279,281],{"class":156,"line":157},[154,252,254],{"class":253},"s7zQu","await",[154,256,257],{"class":164}," user",[154,259,260],{"class":168},".",[154,262,263],{"class":160},"forTeam",[154,265,266],{"class":164},"(teamId)",[154,268,260],{"class":168},[154,270,271],{"class":160},"assignRole",[154,273,165],{"class":164},[154,275,211],{"class":168},[154,277,278],{"class":207},"admin",[154,280,211],{"class":168},[154,282,222],{"class":164},[154,284,285,287,289,291,293,295,297,300,302,304,307,309],{"class":156,"line":172},[154,286,254],{"class":253},[154,288,257],{"class":164},[154,290,260],{"class":168},[154,292,263],{"class":160},[154,294,266],{"class":164},[154,296,260],{"class":168},[154,298,299],{"class":160},"can",[154,301,165],{"class":164},[154,303,211],{"class":168},[154,305,306],{"class":207},"manage billing",[154,308,211],{"class":168},[154,310,222],{"class":164},[154,312,313,315,317,319,321,323,325,328,330,333,335,337,339,341,344],{"class":156,"line":179},[154,314,254],{"class":253},[154,316,257],{"class":164},[154,318,260],{"class":168},[154,320,263],{"class":160},[154,322,165],{"class":164},[154,324,231],{"class":168},[154,326,327],{"class":164},")",[154,329,260],{"class":168},[154,331,332],{"class":160},"hasRole",[154,334,165],{"class":164},[154,336,211],{"class":168},[154,338,278],{"class":207},[154,340,211],{"class":168},[154,342,343],{"class":164},") ",[154,345,346],{"class":175},"\u002F\u002F global scope\n",[130,348,349],{},"Or for a whole async scope, e.g. in a middleware:",[144,351,353],{"className":146,"code":352,"language":149,"meta":150,"style":150},"import { runWithTeam } from '@eienjs\u002Fadonisjs-permission'\n\nawait runWithTeam(teamId, async () => {\n  await user.assignRole('admin')\n  await user.can('manage billing')\n})\n",[139,354,355,380,386,411,432,452],{"__ignoreMap":150},[154,356,357,360,363,366,369,372,374,377],{"class":156,"line":157},[154,358,359],{"class":253},"import",[154,361,362],{"class":168}," {",[154,364,365],{"class":164}," runWithTeam",[154,367,368],{"class":168}," }",[154,370,371],{"class":253}," from",[154,373,204],{"class":168},[154,375,376],{"class":207},"@eienjs\u002Fadonisjs-permission",[154,378,379],{"class":168},"'\n",[154,381,382],{"class":156,"line":172},[154,383,385],{"emptyLinePlaceholder":384},true,"\n",[154,387,388,390,392,395,398,402,405,408],{"class":156,"line":179},[154,389,254],{"class":253},[154,391,365],{"class":160},[154,393,394],{"class":164},"(teamId",[154,396,397],{"class":168},",",[154,399,401],{"class":400},"spNyl"," async",[154,403,404],{"class":168}," ()",[154,406,407],{"class":400}," =>",[154,409,410],{"class":168}," {\n",[154,412,413,416,418,420,422,424,426,428,430],{"class":156,"line":196},[154,414,415],{"class":253},"  await",[154,417,257],{"class":164},[154,419,260],{"class":168},[154,421,271],{"class":160},[154,423,165],{"class":182},[154,425,211],{"class":168},[154,427,278],{"class":207},[154,429,211],{"class":168},[154,431,222],{"class":182},[154,433,434,436,438,440,442,444,446,448,450],{"class":156,"line":216},[154,435,415],{"class":253},[154,437,257],{"class":164},[154,439,260],{"class":168},[154,441,299],{"class":160},[154,443,165],{"class":182},[154,445,211],{"class":168},[154,447,306],{"class":207},[154,449,211],{"class":168},[154,451,222],{"class":182},[154,453,455,457],{"class":156,"line":454},6,[154,456,219],{"class":168},[154,458,222],{"class":164},[130,460,461],{},"Or set it for the current execution context:",[144,463,465],{"className":146,"code":464,"language":149,"meta":150,"style":150},"import { getPermissionsTeamId, setPermissionsTeamId } from '@eienjs\u002Fadonisjs-permission'\n\nsetPermissionsTeamId(teamId)\ngetPermissionsTeamId()\n",[139,466,467,491,495,503],{"__ignoreMap":150},[154,468,469,471,473,476,478,481,483,485,487,489],{"class":156,"line":157},[154,470,359],{"class":253},[154,472,362],{"class":168},[154,474,475],{"class":164}," getPermissionsTeamId",[154,477,397],{"class":168},[154,479,480],{"class":164}," setPermissionsTeamId",[154,482,368],{"class":168},[154,484,371],{"class":253},[154,486,204],{"class":168},[154,488,376],{"class":207},[154,490,379],{"class":168},[154,492,493],{"class":156,"line":172},[154,494,385],{"emptyLinePlaceholder":384},[154,496,497,500],{"class":156,"line":179},[154,498,499],{"class":160},"setPermissionsTeamId",[154,501,502],{"class":164},"(teamId)\n",[154,504,505,508],{"class":156,"line":196},[154,506,507],{"class":160},"getPermissionsTeamId",[154,509,510],{"class":164},"()\n",[130,512,513,516,517,520],{},[139,514,515],{},"runWithTeam"," uses ",[139,518,519],{},"AsyncLocalStorage",", so concurrent requests never leak their team into each other.",[522,523,524],"note",{},[130,525,526],{},"Team ids can be numbers, bigints or UUID strings.",[528,529,530],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":150,"searchDepth":157,"depth":172,"links":532},[533],{"id":236,"depth":172,"text":237},"Scope roles and permissions per team or tenant.","md",{},{"icon":97},{"title":94,"description":534},"j4dJgy_wdENPjQ1jBQfgRIK1oh_UQZ_G_Njpr_dv7do",[541,543],{"title":83,"path":84,"stem":85,"description":542,"icon":86,"children":-1},"Declare roles and permissions in config and sync them with the database.",{"title":99,"path":100,"stem":101,"description":544,"icon":102,"children":-1},"Let a role bypass every permission check.",1793679731157]