F5 StudioF5 Studio
Skip to main content

Admin Panel

The /marketadmin command opens a full NUI moderation panel — a dashboard with live charts, paginated tables of every listing, order, conversation and review, a player lookup with moderation tools, a ban manager and an audit log.

config.lua
F5Cfg.Admin = {
command = 'marketadmin',
acePermission = 'f5market.admin',
frameworkGroups = { 'admin', 'god' },
auditWebhook = true,
actionCooldownMs = 800,
pageSize = 25,
}

Access Control

A player may open the panel — and perform any action in it — if either condition is met:

  1. ACE — they pass IsPlayerAceAllowed(src, acePermission) (default f5market.admin), or
  2. Framework group — they belong to one of frameworkGroups (default admin, god).

Every read and every action re-checks this on the server, so the panel can't be opened or driven by a non-admin client.

Granting via ACE

server.cfg
add_ace group.admin f5market.admin allow
add_principal identifier.steam:110000100000000 group.admin

Set acePermission = '' to disable the ACE path entirely.

Granting via Framework Group

The group check (Bridge.HasGroup) is resolved per framework:

FrameworkGroup check
QBCoreQBCore.Functions.HasPermission(src, group) if available, otherwise ACE group.<name>
QBoxACE group.<name>
ESXxPlayer.getGroup() == group

So on a stock server, anyone in the admin or god group already has access — no extra setup. Set frameworkGroups = {} to disable the group path entirely.

Don't lock yourself out

If you set both acePermission = '' and frameworkGroups = {}, nobody can open the panel. Keep at least one path enabled.

Rate Limiting & Audit

  • actionCooldownMs (default 800) — a per-admin debounce on mutating actions, so a double-click can't fire an action twice.
  • pageSize (default 25) — rows per page in every paginated table.
  • auditWebhook (default true) — every admin action is written to the f5_shadowmarket_admin_log table and, when this is on, mirrored to Discord as an admin_audit webhook. See Webhooks.

Panel Tabs

Dashboard

KPIs and charts at a glance:

  • KPIs — turnover (sum of completed orders), money currently in escrow (pending + ready orders), active listings, active auctions, active bans.
  • Orders by status — a doughnut chart (Chart.js).
  • Top sellers by gross — a horizontal bar chart, plus a table of the top 10 sellers and the largest transactions.

Listings

Paginated table of every listing (ID, title, item, type, seller, price, status), filterable by seller id, item name and status. Actions on active listings:

ActionEffect
Cancel listingCancel an active listing (with a reason); refunds any leading bid and returns the item to the seller
Takedown listingForce-remove a listing (with a reason)

Orders

Paginated table of orders (ID, item, buyer, seller, price, status), filterable by party (buyer/seller id) and status. Action on pending/ready orders:

ActionEffect
Refund orderRefund the buyer and return the item to the seller

Players

Look up a player by citizen id to see a full profile:

  • Identity (name, online status, citizen id, and Steam/FiveM/Discord identifiers when available).
  • Ratings (average + review count) and stats (listings, sold, bought, total earned, total spent).
  • Their listings, sold orders and bought orders.
  • Active bans, with an unban action.

Moderation tools:

ActionEffect
BanRestrict market access — scope full / sell / bid, a duration in hours (0 = permanent) and a reason
UnbanLift an active ban

Bans are stored in f5_shadowmarket_bans with the chosen scope.

Chat

Browse conversations (ID, listing, buyer, seller, last-message time) and open any thread to read messages. Action:

ActionEffect
Hide messageHide a message from the conversation

Reviews

Paginated table of reviews (ID, seller, buyer, item, rating, comment, status, date), filterable by seller id and visibility. Actions:

ActionEffect
Hide reviewHide a visible review
Unhide reviewRestore a hidden review
Delete reviewPermanently delete a review

Logs

The audit log — every admin action with timestamp, admin, action, target type, target id and a JSON detail snapshot. Target types are listing, order, offer, player, message and review.

See Also