[{"data":1,"prerenderedAt":1221},["ShallowReactive",2],{"navigation_docs":3,"-essentials-multi-tenancy":85,"-essentials-multi-tenancy-surround":1216},[4,20,70],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","i-lucide-download",{"title":16,"path":17,"stem":18,"icon":19},"Upgrading","\u002Fgetting-started\u002Fupgrading","1.getting-started\u002F2.upgrading","i-lucide-arrow-up-circle",{"title":21,"path":22,"stem":23,"children":24,"page":6},"Essentials","\u002Fessentials","2.essentials",[25,30,35,40,45,50,55,60,65],{"title":26,"path":27,"stem":28,"icon":29},"Configuration","\u002Fessentials\u002Fconfiguration","2.essentials\u002F1.configuration","i-lucide-settings",{"title":31,"path":32,"stem":33,"icon":34},"Authorization","\u002Fessentials\u002Fauthorization","2.essentials\u002F2.authorization","i-lucide-shield",{"title":36,"path":37,"stem":38,"icon":39},"Mentions","\u002Fessentials\u002Fmentions","2.essentials\u002F3.mentions","i-lucide-at-sign",{"title":41,"path":42,"stem":43,"icon":44},"Reactions","\u002Fessentials\u002Freactions","2.essentials\u002F4.reactions","i-lucide-smile",{"title":46,"path":47,"stem":48,"icon":49},"Attachments","\u002Fessentials\u002Fattachments","2.essentials\u002F5.attachments","i-lucide-paperclip",{"title":51,"path":52,"stem":53,"icon":54},"Notifications","\u002Fessentials\u002Fnotifications","2.essentials\u002F6.notifications","i-lucide-bell",{"title":56,"path":57,"stem":58,"icon":59},"Database Schema","\u002Fessentials\u002Fdatabase-schema","2.essentials\u002F7.database-schema","i-lucide-database",{"title":61,"path":62,"stem":63,"icon":64},"Multi-tenancy","\u002Fessentials\u002Fmulti-tenancy","2.essentials\u002F8.multi-tenancy","i-lucide-building-2",{"title":66,"path":67,"stem":68,"icon":69},"Pinned Comments","\u002Fessentials\u002Fpinning","2.essentials\u002F9.pinning","i-lucide-pin",{"title":71,"path":72,"stem":73,"children":74,"page":6},"Community","\u002Fcommunity","4.community",[75,80],{"title":76,"path":77,"stem":78,"icon":79},"Contributing","\u002Fcommunity\u002Fcontributing","4.community\u002F1.contributing","i-lucide-heart-handshake",{"title":81,"path":82,"stem":83,"icon":84},"License","\u002Fcommunity\u002Flicense","4.community\u002F2.license","i-lucide-scale",{"id":86,"title":61,"body":87,"description":1208,"extension":1209,"links":1210,"meta":1211,"navigation":1212,"path":62,"seo":1213,"stem":63,"__hash__":1215},"docs\u002F2.essentials\u002F8.multi-tenancy.md",{"type":88,"value":89,"toc":1194},"minimark",[90,94,99,102,135,138,142,147,163,264,268,286,292,298,836,840,850,934,938,942,1017,1026,1030,1109,1113,1116,1173,1176,1190],[91,92,93],"p",{},"Enable this feature when your app serves multiple tenants (teams, organisations, workspaces) from a single database and each tenant must only see their own comments.",[95,96,98],"h2",{"id":97},"how-it-works","How it works",[91,100,101],{},"Three things happen automatically once enabled:",[103,104,105,114,132],"ul",{},[106,107,108,109,113],"li",{},"A ",[110,111,112],"code",{},"tenant_id"," column is added to all five tables via migrations",[106,115,116,117,120,121,124,125,128,129],{},"Every ",[110,118,119],{},"Comment"," query gets ",[110,122,123],{},"WHERE tenant_id = ?"," applied by a global scope — including queries through ",[110,126,127],{},"$model->comments()"," and ",[110,130,131],{},"topLevelComments()",[106,133,134],{},"New comments are stamped with the current tenant ID on creation",[91,136,137],{},"You register one closure that resolves the current tenant. Everything else is handled by the package.",[95,139,141],{"id":140},"setup","Setup",[143,144,146],"h3",{"id":145},"_1-enable-in-config","1. Enable in config",[91,148,149,150,153,154,157,158,162],{},"Set ",[110,151,152],{},"enabled"," to ",[110,155,156],{},"true"," ",[159,160,161],"strong",{},"before"," running migrations — the migration stubs read this value at runtime.",[164,165,170],"pre",{"className":166,"code":167,"language":168,"meta":169,"style":169},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u002F\u002F config\u002Fcomments.php\n'multi_tenancy' => [\n    'enabled' => true,\n    'tenant_column' => 'tenant_id', \u002F\u002F change to team_id, org_id, etc. if needed\n    'tenant_resolver' => null,      \u002F\u002F register this in a service provider, not here\n],\n","php","",[110,171,172,181,200,215,240,258],{"__ignoreMap":169},[173,174,177],"span",{"class":175,"line":176},"line",1,[173,178,180],{"class":179},"sHwdD","\u002F\u002F config\u002Fcomments.php\n",[173,182,184,188,192,194,197],{"class":175,"line":183},2,[173,185,187],{"class":186},"sMK4o","'",[173,189,191],{"class":190},"sfazB","multi_tenancy",[173,193,187],{"class":186},[173,195,196],{"class":186}," =>",[173,198,199],{"class":186}," [\n",[173,201,203,206,208,210,212],{"class":175,"line":202},3,[173,204,205],{"class":186},"    '",[173,207,152],{"class":190},[173,209,187],{"class":186},[173,211,196],{"class":186},[173,213,214],{"class":186}," true,\n",[173,216,218,220,223,225,227,230,232,234,237],{"class":175,"line":217},4,[173,219,205],{"class":186},[173,221,222],{"class":190},"tenant_column",[173,224,187],{"class":186},[173,226,196],{"class":186},[173,228,229],{"class":186}," '",[173,231,112],{"class":190},[173,233,187],{"class":186},[173,235,236],{"class":186},",",[173,238,239],{"class":179}," \u002F\u002F change to team_id, org_id, etc. if needed\n",[173,241,243,245,248,250,252,255],{"class":175,"line":242},5,[173,244,205],{"class":186},[173,246,247],{"class":190},"tenant_resolver",[173,249,187],{"class":186},[173,251,196],{"class":186},[173,253,254],{"class":186}," null,",[173,256,257],{"class":179},"      \u002F\u002F register this in a service provider, not here\n",[173,259,261],{"class":175,"line":260},6,[173,262,263],{"class":186},"],\n",[143,265,267],{"id":266},"_2-run-migrations","2. Run migrations",[164,269,273],{"className":270,"code":271,"language":272,"meta":169,"style":169},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","php artisan migrate\n","bash",[110,274,275],{"__ignoreMap":169},[173,276,277,280,283],{"class":175,"line":176},[173,278,168],{"class":279},"sBMFI",[173,281,282],{"class":190}," artisan",[173,284,285],{"class":190}," migrate\n",[91,287,288,289,291],{},"The package stubs will add the ",[110,290,112],{}," column to all five tables.",[91,293,294,297],{},[159,295,296],{},"Already ran migrations?"," Add the column manually:",[164,299,301],{"className":166,"code":300,"language":168,"meta":169,"style":169},"public function up(): void\n{\n    $column = config('comments.multi_tenancy.tenant_column', 'tenant_id');\n\n    Schema::table('comments', function (Blueprint $table) use ($column) {\n        $table->unsignedBigInteger($column)->nullable()->index()->after('id');\n    });\n\n    Schema::table('comment_attachments', function (Blueprint $table) use ($column) {\n        $table->unsignedBigInteger($column)->nullable()->index()->after('id');\n    });\n\n    Schema::table('comment_mentions', function (Blueprint $table) use ($column) {\n        $table->unsignedBigInteger($column)->nullable()->index()->after('id');\n    });\n\n    Schema::table('comment_reactions', function (Blueprint $table) use ($column) {\n        $table->unsignedBigInteger($column)->nullable()->index()->after('id');\n    });\n\n    Schema::table('comment_subscriptions', function (Blueprint $table) use ($column) {\n        $table->unsignedBigInteger($column)->nullable()->index()->after('id');\n    });\n}\n",[110,302,303,323,328,364,370,422,468,474,479,521,558,563,568,610,647,652,657,699,736,741,746,788,825,830],{"__ignoreMap":169},[173,304,305,309,312,316,319],{"class":175,"line":176},[173,306,308],{"class":307},"spNyl","public",[173,310,311],{"class":307}," function",[173,313,315],{"class":314},"s2Zo4"," up",[173,317,318],{"class":186},"():",[173,320,322],{"class":321},"sbssI"," void\n",[173,324,325],{"class":175,"line":183},[173,326,327],{"class":186},"{\n",[173,329,330,333,337,340,343,346,348,351,353,355,357,359,361],{"class":175,"line":202},[173,331,332],{"class":186},"    $",[173,334,336],{"class":335},"sTEyZ","column ",[173,338,339],{"class":186},"=",[173,341,342],{"class":314}," config",[173,344,345],{"class":186},"(",[173,347,187],{"class":186},[173,349,350],{"class":190},"comments.multi_tenancy.tenant_column",[173,352,187],{"class":186},[173,354,236],{"class":186},[173,356,229],{"class":186},[173,358,112],{"class":190},[173,360,187],{"class":186},[173,362,363],{"class":186},");\n",[173,365,366],{"class":175,"line":217},[173,367,369],{"emptyLinePlaceholder":368},true,"\n",[173,371,372,375,378,381,383,385,388,390,392,394,397,400,403,405,408,411,414,417,419],{"class":175,"line":242},[173,373,374],{"class":279},"    Schema",[173,376,377],{"class":186},"::",[173,379,380],{"class":314},"table",[173,382,345],{"class":186},[173,384,187],{"class":186},[173,386,387],{"class":190},"comments",[173,389,187],{"class":186},[173,391,236],{"class":186},[173,393,311],{"class":307},[173,395,396],{"class":186}," (",[173,398,399],{"class":279},"Blueprint",[173,401,402],{"class":186}," $",[173,404,380],{"class":335},[173,406,407],{"class":186},")",[173,409,410],{"class":321}," use",[173,412,413],{"class":186}," ($",[173,415,416],{"class":335},"column",[173,418,407],{"class":186},[173,420,421],{"class":186}," {\n",[173,423,424,427,429,432,435,438,440,443,446,449,452,454,457,459,461,464,466],{"class":175,"line":260},[173,425,426],{"class":186},"        $",[173,428,380],{"class":335},[173,430,431],{"class":186},"->",[173,433,434],{"class":314},"unsignedBigInteger",[173,436,437],{"class":186},"($",[173,439,416],{"class":335},[173,441,442],{"class":186},")->",[173,444,445],{"class":314},"nullable",[173,447,448],{"class":186},"()->",[173,450,451],{"class":314},"index",[173,453,448],{"class":186},[173,455,456],{"class":314},"after",[173,458,345],{"class":186},[173,460,187],{"class":186},[173,462,463],{"class":190},"id",[173,465,187],{"class":186},[173,467,363],{"class":186},[173,469,471],{"class":175,"line":470},7,[173,472,473],{"class":186},"    });\n",[173,475,477],{"class":175,"line":476},8,[173,478,369],{"emptyLinePlaceholder":368},[173,480,482,484,486,488,490,492,495,497,499,501,503,505,507,509,511,513,515,517,519],{"class":175,"line":481},9,[173,483,374],{"class":279},[173,485,377],{"class":186},[173,487,380],{"class":314},[173,489,345],{"class":186},[173,491,187],{"class":186},[173,493,494],{"class":190},"comment_attachments",[173,496,187],{"class":186},[173,498,236],{"class":186},[173,500,311],{"class":307},[173,502,396],{"class":186},[173,504,399],{"class":279},[173,506,402],{"class":186},[173,508,380],{"class":335},[173,510,407],{"class":186},[173,512,410],{"class":321},[173,514,413],{"class":186},[173,516,416],{"class":335},[173,518,407],{"class":186},[173,520,421],{"class":186},[173,522,524,526,528,530,532,534,536,538,540,542,544,546,548,550,552,554,556],{"class":175,"line":523},10,[173,525,426],{"class":186},[173,527,380],{"class":335},[173,529,431],{"class":186},[173,531,434],{"class":314},[173,533,437],{"class":186},[173,535,416],{"class":335},[173,537,442],{"class":186},[173,539,445],{"class":314},[173,541,448],{"class":186},[173,543,451],{"class":314},[173,545,448],{"class":186},[173,547,456],{"class":314},[173,549,345],{"class":186},[173,551,187],{"class":186},[173,553,463],{"class":190},[173,555,187],{"class":186},[173,557,363],{"class":186},[173,559,561],{"class":175,"line":560},11,[173,562,473],{"class":186},[173,564,566],{"class":175,"line":565},12,[173,567,369],{"emptyLinePlaceholder":368},[173,569,571,573,575,577,579,581,584,586,588,590,592,594,596,598,600,602,604,606,608],{"class":175,"line":570},13,[173,572,374],{"class":279},[173,574,377],{"class":186},[173,576,380],{"class":314},[173,578,345],{"class":186},[173,580,187],{"class":186},[173,582,583],{"class":190},"comment_mentions",[173,585,187],{"class":186},[173,587,236],{"class":186},[173,589,311],{"class":307},[173,591,396],{"class":186},[173,593,399],{"class":279},[173,595,402],{"class":186},[173,597,380],{"class":335},[173,599,407],{"class":186},[173,601,410],{"class":321},[173,603,413],{"class":186},[173,605,416],{"class":335},[173,607,407],{"class":186},[173,609,421],{"class":186},[173,611,613,615,617,619,621,623,625,627,629,631,633,635,637,639,641,643,645],{"class":175,"line":612},14,[173,614,426],{"class":186},[173,616,380],{"class":335},[173,618,431],{"class":186},[173,620,434],{"class":314},[173,622,437],{"class":186},[173,624,416],{"class":335},[173,626,442],{"class":186},[173,628,445],{"class":314},[173,630,448],{"class":186},[173,632,451],{"class":314},[173,634,448],{"class":186},[173,636,456],{"class":314},[173,638,345],{"class":186},[173,640,187],{"class":186},[173,642,463],{"class":190},[173,644,187],{"class":186},[173,646,363],{"class":186},[173,648,650],{"class":175,"line":649},15,[173,651,473],{"class":186},[173,653,655],{"class":175,"line":654},16,[173,656,369],{"emptyLinePlaceholder":368},[173,658,660,662,664,666,668,670,673,675,677,679,681,683,685,687,689,691,693,695,697],{"class":175,"line":659},17,[173,661,374],{"class":279},[173,663,377],{"class":186},[173,665,380],{"class":314},[173,667,345],{"class":186},[173,669,187],{"class":186},[173,671,672],{"class":190},"comment_reactions",[173,674,187],{"class":186},[173,676,236],{"class":186},[173,678,311],{"class":307},[173,680,396],{"class":186},[173,682,399],{"class":279},[173,684,402],{"class":186},[173,686,380],{"class":335},[173,688,407],{"class":186},[173,690,410],{"class":321},[173,692,413],{"class":186},[173,694,416],{"class":335},[173,696,407],{"class":186},[173,698,421],{"class":186},[173,700,702,704,706,708,710,712,714,716,718,720,722,724,726,728,730,732,734],{"class":175,"line":701},18,[173,703,426],{"class":186},[173,705,380],{"class":335},[173,707,431],{"class":186},[173,709,434],{"class":314},[173,711,437],{"class":186},[173,713,416],{"class":335},[173,715,442],{"class":186},[173,717,445],{"class":314},[173,719,448],{"class":186},[173,721,451],{"class":314},[173,723,448],{"class":186},[173,725,456],{"class":314},[173,727,345],{"class":186},[173,729,187],{"class":186},[173,731,463],{"class":190},[173,733,187],{"class":186},[173,735,363],{"class":186},[173,737,739],{"class":175,"line":738},19,[173,740,473],{"class":186},[173,742,744],{"class":175,"line":743},20,[173,745,369],{"emptyLinePlaceholder":368},[173,747,749,751,753,755,757,759,762,764,766,768,770,772,774,776,778,780,782,784,786],{"class":175,"line":748},21,[173,750,374],{"class":279},[173,752,377],{"class":186},[173,754,380],{"class":314},[173,756,345],{"class":186},[173,758,187],{"class":186},[173,760,761],{"class":190},"comment_subscriptions",[173,763,187],{"class":186},[173,765,236],{"class":186},[173,767,311],{"class":307},[173,769,396],{"class":186},[173,771,399],{"class":279},[173,773,402],{"class":186},[173,775,380],{"class":335},[173,777,407],{"class":186},[173,779,410],{"class":321},[173,781,413],{"class":186},[173,783,416],{"class":335},[173,785,407],{"class":186},[173,787,421],{"class":186},[173,789,791,793,795,797,799,801,803,805,807,809,811,813,815,817,819,821,823],{"class":175,"line":790},22,[173,792,426],{"class":186},[173,794,380],{"class":335},[173,796,431],{"class":186},[173,798,434],{"class":314},[173,800,437],{"class":186},[173,802,416],{"class":335},[173,804,442],{"class":186},[173,806,445],{"class":314},[173,808,448],{"class":186},[173,810,451],{"class":314},[173,812,448],{"class":186},[173,814,456],{"class":314},[173,816,345],{"class":186},[173,818,187],{"class":186},[173,820,463],{"class":190},[173,822,187],{"class":186},[173,824,363],{"class":186},[173,826,828],{"class":175,"line":827},23,[173,829,473],{"class":186},[173,831,833],{"class":175,"line":832},24,[173,834,835],{"class":186},"}\n",[143,837,839],{"id":838},"_3-register-a-resolver","3. Register a resolver",[91,841,842,843,846,847,849],{},"The resolver tells the package which tenant is currently active. Return ",[110,844,845],{},"null"," during CLI commands or queue workers — the scope is skipped automatically when ",[110,848,845],{}," is returned.",[164,851,853],{"className":166,"code":852,"language":168,"meta":169,"style":169},"\u002F\u002F AppServiceProvider::boot()\nuse Relaticle\\Comments\\CommentsConfig;\n\nCommentsConfig::resolveTenantUsing(fn (): int|string|null => auth()->user()?->team_id);\n",[110,854,855,860,882,886],{"__ignoreMap":169},[173,856,857],{"class":175,"line":176},[173,858,859],{"class":179},"\u002F\u002F AppServiceProvider::boot()\n",[173,861,862,865,868,871,874,876,879],{"class":175,"line":183},[173,863,864],{"class":321},"use",[173,866,867],{"class":335}," Relaticle",[173,869,870],{"class":186},"\\",[173,872,873],{"class":335},"Comments",[173,875,870],{"class":186},[173,877,878],{"class":335},"CommentsConfig",[173,880,881],{"class":186},";\n",[173,883,884],{"class":175,"line":202},[173,885,369],{"emptyLinePlaceholder":368},[173,887,888,890,892,895,897,900,903,906,909,912,914,916,918,921,923,926,929,932],{"class":175,"line":217},[173,889,878],{"class":279},[173,891,377],{"class":186},[173,893,894],{"class":314},"resolveTenantUsing",[173,896,345],{"class":186},[173,898,899],{"class":307},"fn",[173,901,902],{"class":186}," ():",[173,904,905],{"class":321}," int",[173,907,908],{"class":186},"|",[173,910,911],{"class":321},"string",[173,913,908],{"class":186},[173,915,845],{"class":321},[173,917,196],{"class":186},[173,919,920],{"class":314}," auth",[173,922,448],{"class":186},[173,924,925],{"class":314},"user",[173,927,928],{"class":186},"()?->",[173,930,931],{"class":335},"team_id",[173,933,363],{"class":186},[95,935,937],{"id":936},"framework-examples","Framework examples",[143,939,941],{"id":940},"filament","Filament",[164,943,945],{"className":166,"code":944,"language":168,"meta":169,"style":169},"use Filament\\Facades\\Filament;\nuse Relaticle\\Comments\\CommentsConfig;\n\nCommentsConfig::resolveTenantUsing(fn () => Filament::getTenant()?->getKey());\n",[110,946,947,965,981,985],{"__ignoreMap":169},[173,948,949,951,954,956,959,961,963],{"class":175,"line":176},[173,950,864],{"class":321},[173,952,953],{"class":335}," Filament",[173,955,870],{"class":186},[173,957,958],{"class":335},"Facades",[173,960,870],{"class":186},[173,962,941],{"class":335},[173,964,881],{"class":186},[173,966,967,969,971,973,975,977,979],{"class":175,"line":183},[173,968,864],{"class":321},[173,970,867],{"class":335},[173,972,870],{"class":186},[173,974,873],{"class":335},[173,976,870],{"class":186},[173,978,878],{"class":335},[173,980,881],{"class":186},[173,982,983],{"class":175,"line":202},[173,984,369],{"emptyLinePlaceholder":368},[173,986,987,989,991,993,995,997,1000,1002,1004,1006,1009,1011,1014],{"class":175,"line":217},[173,988,878],{"class":279},[173,990,377],{"class":186},[173,992,894],{"class":314},[173,994,345],{"class":186},[173,996,899],{"class":307},[173,998,999],{"class":186}," ()",[173,1001,196],{"class":186},[173,1003,953],{"class":279},[173,1005,377],{"class":186},[173,1007,1008],{"class":314},"getTenant",[173,1010,928],{"class":186},[173,1012,1013],{"class":314},"getKey",[173,1015,1016],{"class":186},"());\n",[91,1018,1019,1022,1023,1025],{},[110,1020,1021],{},"Filament::getTenant()"," returns ",[110,1024,845],{}," outside a panel request, so artisan and queue contexts are safe without any extra handling.",[143,1027,1029],{"id":1028},"spatie-laravel-multitenancy","Spatie Laravel-Multitenancy",[164,1031,1033],{"className":166,"code":1032,"language":168,"meta":169,"style":169},"use Spatie\\Multitenancy\\Models\\Tenant;\nuse Relaticle\\Comments\\CommentsConfig;\n\nCommentsConfig::resolveTenantUsing(fn () => Tenant::current()?->getKey());\n",[110,1034,1035,1059,1075,1079],{"__ignoreMap":169},[173,1036,1037,1039,1042,1044,1047,1049,1052,1054,1057],{"class":175,"line":176},[173,1038,864],{"class":321},[173,1040,1041],{"class":335}," Spatie",[173,1043,870],{"class":186},[173,1045,1046],{"class":335},"Multitenancy",[173,1048,870],{"class":186},[173,1050,1051],{"class":335},"Models",[173,1053,870],{"class":186},[173,1055,1056],{"class":335},"Tenant",[173,1058,881],{"class":186},[173,1060,1061,1063,1065,1067,1069,1071,1073],{"class":175,"line":183},[173,1062,864],{"class":321},[173,1064,867],{"class":335},[173,1066,870],{"class":186},[173,1068,873],{"class":335},[173,1070,870],{"class":186},[173,1072,878],{"class":335},[173,1074,881],{"class":186},[173,1076,1077],{"class":175,"line":202},[173,1078,369],{"emptyLinePlaceholder":368},[173,1080,1081,1083,1085,1087,1089,1091,1093,1095,1098,1100,1103,1105,1107],{"class":175,"line":217},[173,1082,878],{"class":279},[173,1084,377],{"class":186},[173,1086,894],{"class":314},[173,1088,345],{"class":186},[173,1090,899],{"class":307},[173,1092,999],{"class":186},[173,1094,196],{"class":186},[173,1096,1097],{"class":279}," Tenant",[173,1099,377],{"class":186},[173,1101,1102],{"class":314},"current",[173,1104,928],{"class":186},[173,1106,1013],{"class":314},[173,1108,1016],{"class":186},[95,1110,1112],{"id":1111},"bypassing-the-scope","Bypassing the scope",[91,1114,1115],{},"To query across all tenants in an admin panel or console command:",[164,1117,1119],{"className":166,"code":1118,"language":168,"meta":169,"style":169},"use Relaticle\\Comments\\Scopes\\TenantScope;\n\nComment::withoutGlobalScope(TenantScope::class)->get();\n",[110,1120,1121,1143,1147],{"__ignoreMap":169},[173,1122,1123,1125,1127,1129,1131,1133,1136,1138,1141],{"class":175,"line":176},[173,1124,864],{"class":321},[173,1126,867],{"class":335},[173,1128,870],{"class":186},[173,1130,873],{"class":335},[173,1132,870],{"class":186},[173,1134,1135],{"class":335},"Scopes",[173,1137,870],{"class":186},[173,1139,1140],{"class":335},"TenantScope",[173,1142,881],{"class":186},[173,1144,1145],{"class":175,"line":183},[173,1146,369],{"emptyLinePlaceholder":368},[173,1148,1149,1151,1153,1156,1158,1160,1162,1165,1167,1170],{"class":175,"line":202},[173,1150,119],{"class":279},[173,1152,377],{"class":186},[173,1154,1155],{"class":314},"withoutGlobalScope",[173,1157,345],{"class":186},[173,1159,1140],{"class":279},[173,1161,377],{"class":186},[173,1163,1164],{"class":321},"class",[173,1166,442],{"class":186},[173,1168,1169],{"class":314},"get",[173,1171,1172],{"class":186},"();\n",[95,1174,31],{"id":1175},"authorization",[91,1177,1178,1179,1182,1183,128,1186,1189],{},"The global scope filters queries. The ",[110,1180,1181],{},"CommentPolicy"," independently verifies tenant ownership on ",[110,1184,1185],{},"update",[110,1187,1188],{},"delete",". Both layers enforce the boundary — the policy does not assume the comment was loaded through a scoped query.",[1191,1192,1193],"style",{},"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}",{"title":169,"searchDepth":183,"depth":183,"links":1195},[1196,1197,1202,1206,1207],{"id":97,"depth":183,"text":98},{"id":140,"depth":183,"text":141,"children":1198},[1199,1200,1201],{"id":145,"depth":202,"text":146},{"id":266,"depth":202,"text":267},{"id":838,"depth":202,"text":839},{"id":936,"depth":183,"text":937,"children":1203},[1204,1205],{"id":940,"depth":202,"text":941},{"id":1028,"depth":202,"text":1029},{"id":1111,"depth":183,"text":1112},{"id":1175,"depth":183,"text":31},"Isolate comments per tenant with automatic query scoping and zero boilerplate.","md",null,{},{"icon":64},{"description":1214,"title":61},"Enable multi-tenancy in the Comments package to isolate data per tenant.","reXnbQEk5w8uJr1ameZsKjs3OmW4Qkcn73YJr7CjgUU",[1217,1219],{"title":56,"path":57,"stem":58,"description":1218,"icon":59,"children":-1},"Tables, relationships, and indexes used by the Comments package.",{"title":66,"path":67,"stem":68,"description":1220,"icon":69,"children":-1},"Pin important comments to the top of a thread.",1777473063994]