Roles#
Role Types#
| Role | Source | Description |
|---|---|---|
owner | users.role | System admin, can access admin panel |
member | users.role | Regular user (default) |
Backend Permission Check#
typescriptimport { requireAuth } from "@/middleware/auth"
import { sendError } from "@/shared/response"
router.get("/admin-data", requireAuth, async (req, res) => {
if (req.user!.role !== "owner") {
return sendError(res, 403, "Requires admin access")
}
// Admin logic
})
Frontend Menu Filtering#
Sidebar shows admin menu only for owner role:
tsxconst { user } = useUserStore()
const isOwner = user?.role === "owner"
{isOwner && <AdminMenu />}
Admin Management#
bashnpm run owner:set your@email.com # Set owner
npm run owner:remove your@email.com # Remove owner
npm run owner:list # List all owners
Admin Panel Pages#
Pages accessible to owner role (/owner/):
| Page | Function |
|---|---|
/owner/users | User management (view, disable, change role) |
/owner/products | Product management (Stripe product sync) |
/owner/prices | Price management (Stripe price sync) |
/owner/email-templates | Email template editor |
/owner/settings | System settings |
/owner/valkey | Cache management |
/owner/env | Environment variables viewer |