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​