[{"data":1,"prerenderedAt":789},["ShallowReactive",2],{"/docs/jobs/policejob/setup/permissions":3,"/docs/jobs/policejob/setup/permissions-surround":777,"/docs/jobs/policejob/setup/permissions-implemented-suggestions":788},{"id":4,"title":5,"body":6,"description":767,"extension":768,"head":769,"implementedSuggestions":769,"meta":770,"navigation":771,"path":772,"schemaOrg":769,"seo":773,"sitemap":774,"stem":775,"__hash__":776},"docs/1.docs/0.jobs/1.policejob/2.setup/4.permissions.md","Permissions",{"type":7,"value":8,"toc":750},"minimark",[9,39,44,73,356,370,373,381,391,401,405,414,420,431,440,450,461,470,473,479,486,497,503,516,520,529,533,540,605,616,623,629,635,643,647,730,734,737,746],[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 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    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],{"__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},"    adminuncuff           ",[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},"    adminremovesocialwork ",[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},"    jail                  ",[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},"    unjail                ",[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],{"class":86,"line":352},9,[84,354,355],{"class":90},"}\n",[13,357,358,359,362,363,366,367,38],{},"The shared ",[27,360,361],{},"/jobconfig"," command is gated the same way through ",[27,364,365],{},"Config.CommandPermissions.jobconfig"," in ",[27,368,369],{},"sky_jobs_base/config/config.lua",[13,371,372],{},"For the snippet above, sky_base runs at boot:",[74,374,379],{"className":375,"code":377,"language":378},[376],"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,380,377],{"__ignoreMap":80},[13,382,383,384,387,388,38],{},"On QBCore, sky_base additionally wires the ",[27,385,386],{},"qbcore.\u003Cgroup>"," principal for resilience. At runtime each command resolves with a single ",[27,389,390],{},"IsPlayerAceAllowed(src, \"sky_policejob.\u003Ccommand>\")",[13,392,393,394,397,398,400],{},"If a command is ",[16,395,396],{},"not"," listed in ",[27,399,63],{},", only the server console can use it.",[40,402,404],{"id":403},"framework-setup","Framework setup",[406,407,409,410,413],"h3",{"id":408},"qbox-principal-prefix-group","QBox (principal prefix: ",[27,411,412],{},"group.",")",[13,415,416,417,419],{},"Add your admin player to ",[27,418,33],{},":",[74,421,425],{"className":422,"code":423,"filename":29,"language":424,"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,426,427],{"__ignoreMap":80},[84,428,429],{"class":86,"line":87},[84,430,423],{},[13,432,433,434,38],{},"Reference: ",[21,435,439],{"href":436,"rel":437},"https://github.com/Qbox-project/txAdminRecipe/blob/main/permissions.cfg",[438],"nofollow","Qbox txAdmin permissions recipe",[406,441,443,444,447,448,413],{"id":442},"qbcore-principal-prefix-qbcore-or-group","QBCore (principal prefix: ",[27,445,446],{},"qbcore."," or ",[27,449,412],{},[13,451,452,453,456,457,460],{},"sky_base wires both ",[27,454,455],{},"group.\u003Cg>"," and ",[27,458,459],{},"qbcore.\u003Cg>"," on QBCore, so either prefix works:",[74,462,464],{"className":422,"code":463,"filename":29,"language":424,"meta":80,"style":80},"add_principal identifier.license:\u003Clicense> qbcore.admin\n",[27,465,466],{"__ignoreMap":80},[84,467,468],{"class":86,"line":87},[84,469,463],{},[13,471,472],{},"Or, if an existing admin is already online:",[74,474,477],{"className":475,"code":476,"language":378},[376],"/addpermission 1 god\n",[27,478,476],{"__ignoreMap":80},[406,480,482,483,413],{"id":481},"esx-legacy-usersgroup","ESX Legacy (",[27,484,485],{},"users.group",[13,487,488,489,492,493,496],{},"ESX's ",[27,490,491],{},"setGroup"," automatically calls ",[27,494,495],{},"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,498,501],{"className":499,"code":500,"language":378},[376],"/setgroup 1 admin\n",[27,502,500],{"__ignoreMap":80},[13,504,505,506,50,511,38],{},"References: ",[21,507,510],{"href":508,"rel":509},"https://documentation.esx-framework.org/legacy/Commands/setgroup/",[438],"ESX /setgroup",[21,512,515],{"href":513,"rel":514},"https://documentation.esx-framework.org/legacy/Commands/principals/",[438],"ESX principals",[406,517,519],{"id":518},"vrp","vRP",[13,521,522,523,525,526,528],{},"Set the player's group via your vRP admin tooling, then ensure the ",[27,524,455],{}," principal is registered (vRP setups commonly add this to ",[27,527,29],{},").",[40,530,532],{"id":531},"custom-groups","Custom groups",[13,534,535,536,539],{},"To allow another group (for example ",[27,537,538],{},"supporter",") to use a single command, just add it to the relevant entry:",[74,541,543],{"className":76,"code":542,"filename":78,"language":79,"meta":80,"style":80},"Config.CommandPermissions = {\n    stationcreator = { \"god\", \"superadmin\", \"admin\", \"supporter\" },\n    …\n}\n",[27,544,545,555,596,601],{"__ignoreMap":80},[84,546,547,549,551,553],{"class":86,"line":87},[84,548,91],{"class":90},[84,550,95],{"class":94},[84,552,99],{"class":98},[84,554,102],{"class":90},[84,556,557,560,562,564,566,568,570,572,574,576,578,580,582,584,586,588,590,592,594],{"class":86,"line":105},[84,558,559],{"class":90},"    stationcreator ",[84,561,111],{"class":98},[84,563,114],{"class":90},[84,565,117],{"class":98},[84,567,121],{"class":120},[84,569,117],{"class":98},[84,571,50],{"class":90},[84,573,117],{"class":98},[84,575,130],{"class":120},[84,577,117],{"class":98},[84,579,50],{"class":90},[84,581,117],{"class":98},[84,583,139],{"class":120},[84,585,117],{"class":98},[84,587,50],{"class":90},[84,589,117],{"class":98},[84,591,538],{"class":120},[84,593,142],{"class":98},[84,595,145],{"class":90},[84,597,598],{"class":86,"line":148},[84,599,600],{"class":90},"    …\n",[84,602,603],{"class":86,"line":182},[84,604,355],{"class":90},[13,606,607,608,611,612,615],{},"Then grant the player the principal the same way as above (e.g. ",[27,609,610],{},"add_principal identifier.license:\u003Clicense> group.supporter","), and restart ",[27,613,614],{},"sky_policejob"," so the new wiring runs.",[40,617,619,620],{"id":618},"activating-the-boss-menu-with-setboss","Activating the boss menu with ",[27,621,622],{},"/setboss",[13,624,625,626,628],{},"Once your admin group is set, run ",[27,627,622],{}," to grant every permission to a specific job grade:",[74,630,633],{"className":631,"code":632,"language":378},[376],"/setboss police 4\n",[27,634,632],{"__ignoreMap":80},[13,636,637,638,642],{},"See the ",[21,639,641],{"href":640},"../reference/commands","Commands"," page for the full admin command list.",[40,644,646],{"id":645},"troubleshooting","Troubleshooting",[648,649,650,665,682,696,713],"accordion",{},[651,652,654],"accordion-item",{"label":653},"Command says 'No permission'",[13,655,656,657,659,660,662,663,38],{},"Player is not in any of the groups listed for that command in ",[27,658,63],{},", or the ",[21,661,24],{"href":23}," are missing. Restart the server after editing ",[27,664,29],{},[651,666,668],{"label":667},"I granted the group but still no access",[13,669,670,671,673,674,677,678,681],{},"The player must reconnect after the change. After ",[27,672,29],{}," edits, run ",[27,675,676],{},"refresh"," + ",[27,679,680],{},"load permissions"," in the console or restart the server.",[651,683,685],{"label":684},"I added a custom group like supporter",[13,686,687,688,691,692,695],{},"Add the group string to the relevant ",[27,689,690],{},"Config.CommandPermissions[command]"," array, then grant the principal (",[27,693,694],{},"add_principal … group.supporter",") and restart the resource.",[651,697,699],{"label":698},"/setboss ran but the boss menu is still empty",[13,700,701,702,705,706,708,709,712],{},"Grade mismatch. The ",[27,703,704],{},"grade"," you passed to ",[27,707,622],{}," must match the value in ",[27,710,711],{},"sky_job_members.grade"," for that employee. Check the DB, or use the highest grade configured for the job.",[651,714,716],{"label":715},"Unknown command: /setboss",[13,717,718,721,722,725,726,366,728,38],{},[27,719,720],{},"sky_jobs_base"," is not running. It must start ",[16,723,724],{},"before"," ",[27,727,614],{},[27,729,29],{},[40,731,733],{"id":732},"support","Support",[13,735,736],{},"Need help? Our support team is always ready to assist",[738,739],"u-button",{"color":740,"icon":741,"label":742,"target":743,"to":744,"variant":745},"neutral","i-simple-icons-discord","Join Discord","_blank","https://discord.gg/sky-systems","subtle",[747,748,749],"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":751},[752,753,762,763,765,766],{"id":42,"depth":105,"text":43},{"id":403,"depth":105,"text":404,"children":754},[755,757,759,761],{"id":408,"depth":148,"text":756},"QBox (principal prefix: group.)",{"id":442,"depth":148,"text":758},"QBCore (principal prefix: qbcore. or group.)",{"id":481,"depth":148,"text":760},"ESX Legacy (users.group)",{"id":518,"depth":148,"text":519},{"id":531,"depth":105,"text":532},{"id":618,"depth":105,"text":764},"Activating the boss menu with /setboss",{"id":645,"depth":105,"text":646},{"id":732,"depth":105,"text":733},"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":767},{"loc":772},"1.docs/0.jobs/1.policejob/2.setup/4.permissions","Aw3j7H9X-0dhent0F9Yh1QZMWGqkbzEd-x2TbtsaUzM",[778,783],{"title":779,"path":780,"stem":781,"description":782,"children":-1},"Station Setup","/docs/jobs/policejob/setup/station-setup","1.docs/0.jobs/1.policejob/2.setup/3.station-setup","Place stations, jails, and social work zones through the Job Configurator.",{"title":784,"path":785,"stem":786,"description":787,"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.",[],1785073560422]