[{"data":1,"prerenderedAt":891},["ShallowReactive",2],{"/docs/jobs/ambulancejob/setup/permissions":3,"/docs/jobs/ambulancejob/setup/permissions-surround":879,"/docs/jobs/ambulancejob/setup/permissions-implemented-suggestions":890},{"id":4,"title":5,"body":6,"description":869,"extension":870,"head":871,"implementedSuggestions":871,"meta":872,"navigation":873,"path":874,"schemaOrg":871,"seo":875,"sitemap":876,"stem":877,"__hash__":878},"docs/1.docs/0.jobs/0.ambulancejob/2.setup/4.permissions.md","Permissions",{"type":7,"value":8,"toc":852},"minimark",[9,39,44,70,387,401,404,412,422,432,436,445,451,462,471,481,492,501,504,510,517,528,534,537,593,606,610,619,623,630,695,706,712,718,724,737,745,749,832,836,839,848],[10,11,12],"warning",{},[13,14,15,19,20,25,26,30,31,34,35,38],"p",{},[16,17,18],"strong",{},"Admin command not working?"," Make sure the ",[21,22,24],"a",{"href":23},"/docs/installation#permissions-bootstrap","bootstrap ACEs"," are present in your ",[27,28,29],"code",{},"server.cfg"," and your player is in ",[27,32,33],{},"group.admin",". Sky now wires every per-command permission to ACE automatically — no more ",[27,36,37],{},"Sky.Config.AdminGroups",".",[40,41,43],"h2",{"id":42},"how-sky-checks-command-permissions","How Sky checks command permissions",[13,45,46,47,50,51,50,54,57,58,61,62,65,66,69],{},"Every admin command (",[27,48,49],{},"/revive",", ",[27,52,53],{},"/setboss",[27,55,56],{},"/hospitalcreator",", …) is gated by ",[27,59,60],{},"Config.CommandPermissions"," in the job's config. At server start, ",[27,63,64],{},"sky_base"," reads that table and emits one ",[27,67,68],{},"add_ace"," per command × group:",[71,72,78],"pre",{"className":73,"code":74,"filename":75,"language":76,"meta":77,"style":77},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","Config.CommandPermissions = {\n    revive             = { \"god\", \"superadmin\", \"admin\" },\n    stopdeathtimeout   = { \"god\", \"superadmin\", \"admin\" },\n    refunds            = { \"god\", \"superadmin\", \"admin\" },\n    hospitalbeds       = { \"god\", \"superadmin\", \"admin\" },\n    hospitalcreator    = { \"god\", \"superadmin\", \"admin\" },\n    stretchereditor    = { \"god\", \"superadmin\", \"admin\" },\n    removemobilityaid  = { \"god\", \"superadmin\", \"admin\" },\n    kill               = { \"god\", \"superadmin\", \"admin\" },\n}\n","sky_ambulancejob/config/config.lua","lua","",[27,79,80,100,143,177,211,245,279,313,347,381],{"__ignoreMap":77},[81,82,85,89,93,97],"span",{"class":83,"line":84},"line",1,[81,86,88],{"class":87},"sTEyZ","Config.",[81,90,92],{"class":91},"sBMFI","CommandPermissions",[81,94,96],{"class":95},"sMK4o"," =",[81,98,99],{"class":87}," {\n",[81,101,103,106,109,112,115,119,121,123,125,128,130,132,134,137,140],{"class":83,"line":102},2,[81,104,105],{"class":87},"    revive             ",[81,107,108],{"class":95},"=",[81,110,111],{"class":87}," { ",[81,113,114],{"class":95},"\"",[81,116,118],{"class":117},"sfazB","god",[81,120,114],{"class":95},[81,122,50],{"class":87},[81,124,114],{"class":95},[81,126,127],{"class":117},"superadmin",[81,129,114],{"class":95},[81,131,50],{"class":87},[81,133,114],{"class":95},[81,135,136],{"class":117},"admin",[81,138,139],{"class":95},"\" ",[81,141,142],{"class":87},"},\n",[81,144,146,149,151,153,155,157,159,161,163,165,167,169,171,173,175],{"class":83,"line":145},3,[81,147,148],{"class":87},"    stopdeathtimeout   ",[81,150,108],{"class":95},[81,152,111],{"class":87},[81,154,114],{"class":95},[81,156,118],{"class":117},[81,158,114],{"class":95},[81,160,50],{"class":87},[81,162,114],{"class":95},[81,164,127],{"class":117},[81,166,114],{"class":95},[81,168,50],{"class":87},[81,170,114],{"class":95},[81,172,136],{"class":117},[81,174,139],{"class":95},[81,176,142],{"class":87},[81,178,180,183,185,187,189,191,193,195,197,199,201,203,205,207,209],{"class":83,"line":179},4,[81,181,182],{"class":87},"    refunds            ",[81,184,108],{"class":95},[81,186,111],{"class":87},[81,188,114],{"class":95},[81,190,118],{"class":117},[81,192,114],{"class":95},[81,194,50],{"class":87},[81,196,114],{"class":95},[81,198,127],{"class":117},[81,200,114],{"class":95},[81,202,50],{"class":87},[81,204,114],{"class":95},[81,206,136],{"class":117},[81,208,139],{"class":95},[81,210,142],{"class":87},[81,212,214,217,219,221,223,225,227,229,231,233,235,237,239,241,243],{"class":83,"line":213},5,[81,215,216],{"class":87},"    hospitalbeds       ",[81,218,108],{"class":95},[81,220,111],{"class":87},[81,222,114],{"class":95},[81,224,118],{"class":117},[81,226,114],{"class":95},[81,228,50],{"class":87},[81,230,114],{"class":95},[81,232,127],{"class":117},[81,234,114],{"class":95},[81,236,50],{"class":87},[81,238,114],{"class":95},[81,240,136],{"class":117},[81,242,139],{"class":95},[81,244,142],{"class":87},[81,246,248,251,253,255,257,259,261,263,265,267,269,271,273,275,277],{"class":83,"line":247},6,[81,249,250],{"class":87},"    hospitalcreator    ",[81,252,108],{"class":95},[81,254,111],{"class":87},[81,256,114],{"class":95},[81,258,118],{"class":117},[81,260,114],{"class":95},[81,262,50],{"class":87},[81,264,114],{"class":95},[81,266,127],{"class":117},[81,268,114],{"class":95},[81,270,50],{"class":87},[81,272,114],{"class":95},[81,274,136],{"class":117},[81,276,139],{"class":95},[81,278,142],{"class":87},[81,280,282,285,287,289,291,293,295,297,299,301,303,305,307,309,311],{"class":83,"line":281},7,[81,283,284],{"class":87},"    stretchereditor    ",[81,286,108],{"class":95},[81,288,111],{"class":87},[81,290,114],{"class":95},[81,292,118],{"class":117},[81,294,114],{"class":95},[81,296,50],{"class":87},[81,298,114],{"class":95},[81,300,127],{"class":117},[81,302,114],{"class":95},[81,304,50],{"class":87},[81,306,114],{"class":95},[81,308,136],{"class":117},[81,310,139],{"class":95},[81,312,142],{"class":87},[81,314,316,319,321,323,325,327,329,331,333,335,337,339,341,343,345],{"class":83,"line":315},8,[81,317,318],{"class":87},"    removemobilityaid  ",[81,320,108],{"class":95},[81,322,111],{"class":87},[81,324,114],{"class":95},[81,326,118],{"class":117},[81,328,114],{"class":95},[81,330,50],{"class":87},[81,332,114],{"class":95},[81,334,127],{"class":117},[81,336,114],{"class":95},[81,338,50],{"class":87},[81,340,114],{"class":95},[81,342,136],{"class":117},[81,344,139],{"class":95},[81,346,142],{"class":87},[81,348,350,353,355,357,359,361,363,365,367,369,371,373,375,377,379],{"class":83,"line":349},9,[81,351,352],{"class":87},"    kill               ",[81,354,108],{"class":95},[81,356,111],{"class":87},[81,358,114],{"class":95},[81,360,118],{"class":117},[81,362,114],{"class":95},[81,364,50],{"class":87},[81,366,114],{"class":95},[81,368,127],{"class":117},[81,370,114],{"class":95},[81,372,50],{"class":87},[81,374,114],{"class":95},[81,376,136],{"class":117},[81,378,139],{"class":95},[81,380,142],{"class":87},[81,382,384],{"class":83,"line":383},10,[81,385,386],{"class":87},"}\n",[13,388,389,390,393,394,397,398,38],{},"The shared ",[27,391,392],{},"/jobconfig"," command is gated the same way through ",[27,395,396],{},"Config.CommandPermissions.jobconfig"," in ",[27,399,400],{},"sky_jobs_base/config/config.lua",[13,402,403],{},"For the snippet above, sky_base runs at boot:",[71,405,410],{"className":406,"code":408,"language":409},[407],"language-text","add_ace group.god         sky_ambulancejob.revive allow\nadd_ace group.superadmin  sky_ambulancejob.revive allow\nadd_ace group.admin       sky_ambulancejob.revive allow\n… one block per command\n","text",[27,411,408],{"__ignoreMap":77},[13,413,414,415,418,419,38],{},"On QBCore, sky_base additionally wires the ",[27,416,417],{},"qbcore.\u003Cgroup>"," principal for resilience. At runtime each command resolves with a single ",[27,420,421],{},"IsPlayerAceAllowed(src, \"sky_ambulancejob.\u003Ccommand>\")",[13,423,424,425,428,429,431],{},"If a command is ",[16,426,427],{},"not"," listed in ",[27,430,60],{},", only the server console can use it.",[40,433,435],{"id":434},"framework-setup","Framework setup",[437,438,440,441,444],"h3",{"id":439},"qbox-principal-prefix-group","QBox (principal prefix: ",[27,442,443],{},"group.",")",[13,446,447,448,450],{},"Add your admin player to ",[27,449,33],{},":",[71,452,456],{"className":453,"code":454,"filename":29,"language":455,"meta":77,"style":77},"language-cfg shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","add_principal identifier.license:\u003Clicense> group.admin\n","cfg",[27,457,458],{"__ignoreMap":77},[81,459,460],{"class":83,"line":84},[81,461,454],{},[13,463,464,465,38],{},"Reference: ",[21,466,470],{"href":467,"rel":468},"https://github.com/Qbox-project/txAdminRecipe/blob/main/permissions.cfg",[469],"nofollow","Qbox txAdmin permissions recipe",[437,472,474,475,478,479,444],{"id":473},"qbcore-principal-prefix-qbcore-or-group","QBCore (principal prefix: ",[27,476,477],{},"qbcore."," or ",[27,480,443],{},[13,482,483,484,487,488,491],{},"sky_base wires both ",[27,485,486],{},"group.\u003Cg>"," and ",[27,489,490],{},"qbcore.\u003Cg>"," on QBCore, so either prefix works:",[71,493,495],{"className":453,"code":494,"filename":29,"language":455,"meta":77,"style":77},"add_principal identifier.license:\u003Clicense> qbcore.admin\n",[27,496,497],{"__ignoreMap":77},[81,498,499],{"class":83,"line":84},[81,500,494],{},[13,502,503],{},"Or, if an existing admin is already online:",[71,505,508],{"className":506,"code":507,"language":409},[407],"/addpermission 1 god\n",[27,509,507],{"__ignoreMap":77},[437,511,513,514,444],{"id":512},"esx-legacy-usersgroup","ESX Legacy (",[27,515,516],{},"users.group",[13,518,519,520,523,524,527],{},"ESX's ",[27,521,522],{},"setGroup"," automatically calls ",[27,525,526],{},"add_principal identifier.\u003Clicense> group.\u003Cg>"," via es_extended, so ESX players get the same ACE principal as QBox/QBCore. Grant the group in-game:",[71,529,532],{"className":530,"code":531,"language":409},[407],"/setgroup 1 admin\n",[27,533,531],{"__ignoreMap":77},[13,535,536],{},"Or via SQL:",[71,538,542],{"className":539,"code":540,"language":541,"meta":77,"style":77},"language-sql shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","UPDATE users SET `group` = 'admin' WHERE identifier = 'license:\u003Clicense>';\n","sql",[27,543,544],{"__ignoreMap":77},[81,545,546,550,553,556,559,562,565,567,570,572,575,578,581,583,585,588,590],{"class":83,"line":84},[81,547,549],{"class":548},"sbssI","UPDATE",[81,551,552],{"class":87}," users ",[81,554,555],{"class":548},"SET",[81,557,558],{"class":95}," `",[81,560,561],{"class":117},"group",[81,563,564],{"class":95},"`",[81,566,96],{"class":95},[81,568,569],{"class":95}," '",[81,571,136],{"class":117},[81,573,574],{"class":95},"'",[81,576,577],{"class":548}," WHERE",[81,579,580],{"class":87}," identifier ",[81,582,108],{"class":95},[81,584,569],{"class":95},[81,586,587],{"class":117},"license:\u003Clicense>",[81,589,574],{"class":95},[81,591,592],{"class":87},";\n",[13,594,595,596,50,601,38],{},"References: ",[21,597,600],{"href":598,"rel":599},"https://documentation.esx-framework.org/legacy/Commands/setgroup/",[469],"ESX /setgroup",[21,602,605],{"href":603,"rel":604},"https://documentation.esx-framework.org/legacy/Commands/principals/",[469],"ESX principals",[437,607,609],{"id":608},"vrp","vRP",[13,611,612,613,615,616,618],{},"Set the player's group via your vRP admin tooling, then ensure the ",[27,614,486],{}," principal is registered (vRP setups commonly add this to ",[27,617,29],{},").",[40,620,622],{"id":621},"custom-groups","Custom groups",[13,624,625,626,629],{},"To allow another group (for example ",[27,627,628],{},"supporter",") to use a single command, just add it to the relevant entry:",[71,631,633],{"className":73,"code":632,"filename":75,"language":76,"meta":77,"style":77},"Config.CommandPermissions = {\n    revive = { \"god\", \"superadmin\", \"admin\", \"supporter\" },\n    …\n}\n",[27,634,635,645,686,691],{"__ignoreMap":77},[81,636,637,639,641,643],{"class":83,"line":84},[81,638,88],{"class":87},[81,640,92],{"class":91},[81,642,96],{"class":95},[81,644,99],{"class":87},[81,646,647,650,652,654,656,658,660,662,664,666,668,670,672,674,676,678,680,682,684],{"class":83,"line":102},[81,648,649],{"class":87},"    revive ",[81,651,108],{"class":95},[81,653,111],{"class":87},[81,655,114],{"class":95},[81,657,118],{"class":117},[81,659,114],{"class":95},[81,661,50],{"class":87},[81,663,114],{"class":95},[81,665,127],{"class":117},[81,667,114],{"class":95},[81,669,50],{"class":87},[81,671,114],{"class":95},[81,673,136],{"class":117},[81,675,114],{"class":95},[81,677,50],{"class":87},[81,679,114],{"class":95},[81,681,628],{"class":117},[81,683,139],{"class":95},[81,685,142],{"class":87},[81,687,688],{"class":83,"line":145},[81,689,690],{"class":87},"    …\n",[81,692,693],{"class":83,"line":179},[81,694,386],{"class":87},[13,696,697,698,701,702,705],{},"Then grant the player the principal the same way as above (e.g. ",[27,699,700],{},"add_principal identifier.license:\u003Clicense> group.supporter","), and restart ",[27,703,704],{},"sky_ambulancejob"," so the new wiring runs.",[40,707,709,710],{"id":708},"activating-the-boss-menu-with-setboss","Activating the boss menu with ",[27,711,53],{},[13,713,714,715,717],{},"Once your admin group is set, run ",[27,716,53],{}," to grant every permission (boss menu, wholesale, vehicle shop, member management, …) to a specific job grade:",[71,719,722],{"className":720,"code":721,"language":409},[407],"/setboss ambulance 4\n",[27,723,721],{"__ignoreMap":77},[13,725,726,727,730,731,734,735,38],{},"This writes ",[27,728,729],{},"Permission.ALL"," to the ",[27,732,733],{},"sky_job_permissions"," row for that job and grade. Only run it once per fresh install or after wiping ",[27,736,733],{},[13,738,739,740,744],{},"See the ",[21,741,743],{"href":742},"../reference/commands","Commands"," page for the full admin command list.",[40,746,748],{"id":747},"troubleshooting","Troubleshooting",[750,751,752,767,784,798,815],"accordion",{},[753,754,756],"accordion-item",{"label":755},"Command says 'No permission'",[13,757,758,759,761,762,764,765,38],{},"Player is not in any of the groups listed for that command in ",[27,760,60],{},", or the ",[21,763,24],{"href":23}," are missing. Restart the server after editing ",[27,766,29],{},[753,768,770],{"label":769},"I granted the group but still no access",[13,771,772,773,775,776,779,780,783],{},"The player must reconnect after the change. After ",[27,774,29],{}," edits, run ",[27,777,778],{},"refresh"," + ",[27,781,782],{},"load permissions"," in the console or restart the server.",[753,785,787],{"label":786},"I added a custom group like supporter",[13,788,789,790,793,794,797],{},"Add the group string to the relevant ",[27,791,792],{},"Config.CommandPermissions[command]"," array, then grant the principal (",[27,795,796],{},"add_principal … group.supporter",") and restart the resource.",[753,799,801],{"label":800},"/setboss ran but the boss menu is still empty",[13,802,803,804,807,808,810,811,814],{},"Grade mismatch. The ",[27,805,806],{},"grade"," you passed to ",[27,809,53],{}," must match the value in ",[27,812,813],{},"sky_job_members.grade"," for that employee. Check the DB, or use the highest grade configured for the job.",[753,816,818],{"label":817},"Unknown command: /setboss",[13,819,820,823,824,827,828,397,830,38],{},[27,821,822],{},"sky_jobs_base"," is not running. It must start ",[16,825,826],{},"before"," ",[27,829,704],{},[27,831,29],{},[40,833,835],{"id":834},"support","Support",[13,837,838],{},"Need help? Our support team is always ready to assist",[840,841],"u-button",{"color":842,"icon":843,"label":844,"target":845,"to":846,"variant":847},"neutral","i-simple-icons-discord","Join Discord","_blank","https://discord.gg/sky-systems","subtle",[849,850,851],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":77,"searchDepth":84,"depth":102,"links":853},[854,855,864,865,867,868],{"id":42,"depth":102,"text":43},{"id":434,"depth":102,"text":435,"children":856},[857,859,861,863],{"id":439,"depth":145,"text":858},"QBox (principal prefix: group.)",{"id":473,"depth":145,"text":860},"QBCore (principal prefix: qbcore. or group.)",{"id":512,"depth":145,"text":862},"ESX Legacy (users.group)",{"id":608,"depth":145,"text":609},{"id":621,"depth":102,"text":622},{"id":708,"depth":102,"text":866},"Activating the boss menu with /setboss",{"id":747,"depth":102,"text":748},{"id":834,"depth":102,"text":835},"Grant admin access so commands like /setboss and /revive work in your framework.","md",null,{},true,"/docs/jobs/ambulancejob/setup/permissions",{"title":5,"description":869},{"loc":874},"1.docs/0.jobs/0.ambulancejob/2.setup/4.permissions","F1q1UF7X1eqi14SkegQmrLF8NgIOA2Drx8yhy_W6HJ4",[880,885],{"title":881,"path":882,"stem":883,"description":884,"children":-1},"Hospital Setup","/docs/jobs/ambulancejob/setup/hospital-setup","1.docs/0.jobs/0.ambulancejob/2.setup/3.hospital-setup","Place hospitals, hospital beds, and interaction points through the Job Configurator.",{"title":886,"path":887,"stem":888,"description":889,"children":-1},"Vitals & Treatment","/docs/jobs/ambulancejob/features/vitals","1.docs/0.jobs/0.ambulancejob/3.features/1.vitals","Understand how Sky Ambulancejob tracks death causes, assigns injuries, and guides medics through the correct treatment flow.",[],1783080557682]