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