Built-in roles, the permission matrix, and how to assign roles to staff members per brand in OwnPay.
OwnPay uses role-based access control (RBAC) to determine what each staff member can see and do. Roles are assigned per brand, so the same person can be a Manager on one brand and a Viewer on another. For authentication details, see Login and authentication.
The role takes effect the next time the staff member loads a page. If they are currently logged in, ask them to refresh the browser or log out and back in.
The same staff member can hold different roles on different brands. When you edit a staff member, you see a list of all brands with a role selector next to each one. This lets you give someone Admin access on Brand A but only Viewer access on Brand B.
Do not give the Admin or Super Admin role to staff who only need to view reports. Use the Viewer role instead and follow the principle of least privilege.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OwnPay","description":"Open-source, Self-hosted payment gateway with multi-brand support, white-label domains, and 100+ payment gateways.","colors":{"primary":"#0F97ED","light":"#5BB8F5","dark":"#102963"},"logo":{"light":"https://mintcdn.com/ownpay/S70Th8VweRBV-OVo/logo/light.svg?fit=max\u0026auto=format\u0026n=S70Th8VweRBV-OVo\u0026q=85\u0026s=0c0e2df69a1c85bdc1297590e8be64c5","dark":"https://mintcdn.com/ownpay/S70Th8VweRBV-OVo/logo/dark.svg?fit=max\u0026auto=format\u0026n=S70Th8VweRBV-OVo\u0026q=85\u0026s=9be8f7a4a0258f42abf703e80659f76b","href":"https://ownpay.org/docs"},"favicon":"https://mintcdn.com/ownpay/S70Th8VweRBV-OVo/favicon.svg?fit=max\u0026auto=format\u0026n=S70Th8VweRBV-OVo\u0026q=85\u0026s=38a2465d7330cd7f513a442ea6bb9b6d","api":{"playground":{"display":"interactive","proxy":true,"credentials":false},"examples":{"defaults":"all","languages":["curl","php","python","javascript","go","java","nodejs"],"prefill":true,"autogenerate":true},"url":"full","mdx":{"auth":{"method":"bearer","name":"Authorization"},"server":"https://demo.ownpay.org"}},"appearance":{"default":"system"},"background":{"decoration":"gradient"},"navbar":{"links":[{"href":"https://github.com/own-pay/OwnPay","label":"GitHub","type":"github"},{"href":"https://ownpay.org","label":"ownpay.org"},{"href":"/quickstart","label":"Get Started"}],"primary":{"type":"button","label":"Get Started","href":"/quickstart"}},"footer":{"socials":{"github":"https://github.com/own-pay/OwnPay","website":"https://ownpay.org","x":"https://x.com/ownpayorg","facebook":"https://facebook.com/ownpay.org","youtube":"https://youtube.com/@ownpayorg"},"links":[{"header":"Product","items":[{"label":"Quickstart","href":"/docs/quickstart"},{"label":"Installation","href":"/docs/installation"},{"label":"Download","href":"https://update.ownpay.org"},{"label":"Features","href":"/docs/resources/features"},{"label":"Roadmap","href":"/docs/resources/roadmap"},{"label":"Changelog","href":"/docs/resources/changelog"}]},{"header":"Developers","items":[{"label":"API Reference","href":"/docs/api/overview"},{"label":"API Quick Start","href":"/docs/developer/quickstart"},{"label":"Webhooks","href":"/docs/api/webhooks"},{"label":"Plugins","href":"/docs/developer/plugins/overview"}]},{"header":"Resources","items":[{"label":"Architecture","href":"/docs/resources/architecture"},{"label":"Security","href":"/docs/resources/security-compliance"},{"label":"FAQ","href":"/docs/resources/faq"},{"label":"Community","href":"https://github.com/own-pay/OwnPay/discussions"},{"label":"Contributing","href":"/docs/resources/contributing"}]}]},"search":{"prompt":"Search OwnPay docs..."},"seo":{"metatags":{"og:site_name":"OwnPay Documentation","og:locale":"en_US","twitter:card":"summary_large_image","twitter:site":"@ownpayorg","robots":"index, follow, max-snippet:-1, max-image-preview:large","canonical":"https://ownpay.org/docs","fb:app_id":"2933285433703137","og:image:alt":"OwnPay - Open-Source, Self-Hosted Payment Gateway Platform"},"organization":{"id":"https://ownpay.org/#organization","name":"OwnPay","legalName":"OwnPay","url":"https://ownpay.org","logo":"https://ownpay.org/docs/logo/light.svg","sameAs":["https://github.com/own-pay/OwnPay","https://x.com/ownpayorg","https://youtube.com/@ownpayorg","https://facebook.com/ownpay.org","https://github.com/own-pay","https://www.npmjs.com/package/ownpay-nodejs","https://marketplace.whmcs.com/product/8845-ownpay-whmcs","https://github.com/own-pay/OwnPay-Mobile-App","https://facebook.com/groups/ownpay.org"]},"indexing":"all","trailingSlash":false},"icons":{"library":"tabler"},"styling":{"eyebrows":"section","codeblocks":{"theme":{"light":"github-light","dark":"github-dark"}},"latex":true},"integrations":{"clarity":{"projectId":"xfbp4tcicy"},"telemetry":{"enabled":true}},"banner":{"content":"OwnPay v0.2.0 is available. [See what's new](/resources/changelog).","dismissible":true,"type":"info"},"errors":{"404":{"redirect":false,"title":"Lost in transit?","description":"The page you are looking for has moved or does not exist. Try the search bar at the top or explore these key sections:\n\n* **[Getting Started](/quickstart)** - Set up your self-hosted instance.\n* **[Installation](/installation)** - Deploy on shared hosting, VPS, or Docker.\n* **[API Reference](/api/overview)** - Merchant, Mobile, and Admin API specs.\n* **[Developer Hub](/developer/quickstart)** - Build custom plugins and integrations."}},"contextual":{"options":["copy","assistant","view","download-pdf","download-spec","mcp","add-mcp","claude","chatgpt","grok","aistudio","devin","windsurf","devin-mcp","vscode","cursor","perplexity"],"display":"header"},"interaction":{"drilldown":true},"metadata":{"timestamp":true},"variables":{"version":"0.2.0","github":"https://github.com/own-pay/OwnPay","website":"https://ownpay.org","github-docs":"https://github.com/own-pay/ownpay-docs","github-wordpress":"https://github.com/own-pay/OwnPay-WordPress","github-whmcs":"https://marketplace.whmcs.com/product/8845-ownpay-whmcs","docs-url":"https://ownpay.org/docs","mcp-url":"https://ownpay.org/docs/mcp","skills-url":"https://ownpay.org/docs/skill.md","support-email":"ping@ownpay.org","llms-txt":"https://ownpay.org/docs/llms.txt"},"markdown":{"schema":true,"instructions":["OwnPay is licensed under AGPL-3.0 and is completely free - no licensing fees.","Production docs URL: https://ownpay.org/docs - append .md to any page URL for clean markdown.","OwnPay requires PHP 8.3+, MySQL/MariaDB, and Redis.","MCP server available at https://ownpay.org/docs/mcp for programmatic documentation queries.","Use root-relative links (e.g. /quickstart) for internal navigation - do NOT include /docs prefix.","Plugin development: consult /developer/plugins/ pages for correct interfaces and manifests.","Canonical locations: API auth = /api/authentication, webhook verification = /api/webhooks, rate limits = /resources/rate-limiting, transaction statuses = /fundamentals/payment-flow.","The documentation uses the Diataxis framework: Tutorials (learning), How-to (tasks), Reference (lookup), Explanation (understanding)."]},"navigation":{"global":{"anchors":[{"anchor":"Changelog","icon":"history","href":"/resources/changelog"}]},"languages":[{"language":"en","default":true,"href":"introduction"},{"language":"zh","href":"zh/introduction"}]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ownpay","hasAudioNarration":false,"actualSubdomain":"ownpay","customDomains":["ownpay.org"],"gitSource":{"type":"github","owner":"own-pay","repo":"ownpay-docs","deployBranch":"master","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"collectionId":"cb0f1eb3-944e-45c3-aa40-1642f8ad8963","liveDeploymentHistoryId":"6ad921c22b0fc3f48bb38a76","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ad921c22b0fc3f48bb38a76"},"feedback":{"thumbs":true,"edits":true,"issues":true,"agentFeedback":true},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6ad921c22b0fc3f48bb38a76","clientVersion":"0.0.3990","searchFilterCounts":[{"language":"en","tag":"API Reference","count":72},{"language":"en","tag":"Documentation","count":50},{"language":"en","tag":"Developer","count":24},{"language":"en","tag":"Resources","count":18},{"language":"en","tag":"Merchant API","count":16},{"language":"en","tag":"Mobile API","count":12},{"language":"en","tag":"Plugin System","count":7},{"language":"en","tag":"Fundamentals","count":7},{"language":"en","tag":"SDKs \u0026 Libraries","count":6},{"language":"en","tag":"Security \u0026 Access","count":6}],"searchSettings":{"showContentSnippets":true,"isFiltersEnabled":true}},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":true,"enableContextualStarterQuestions":true,"enableAskAiSearchBar":true,"deflection":{"enabled":true,"email":"ping@ownpay.org"}},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-v7-file-tree","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"pause-universal-search-reconcile","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"per-site-search-delta","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-private-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-nav-generations","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"byok-sep-25","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-agent-model-picker","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-updated-9-15","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"isAtlas":false,"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"@keyframes pulse-green{0%{transform:scale(.95);box-shadow:0 0 0 0 rgba(16,185,129,.7)}70%{transform:scale(1);box-shadow:0 0 0 6px transparent}to{transform:scale(.95);box-shadow:0 0 0 0 transparent}}@keyframes slide-right{0%{color:#334155;transform:translateX(0)}50%{color:#38bdf8}to{color:#334155;transform:translateX(4px)}}footer a[href*=\"mintlify.com\"],footer button[aria-label*=\"Switch to dark\"],footer button[aria-label*=\"Switch to light\"],footer button[aria-label*=\"Switch to system\"]{display:none!important}footer#footer{background:#fafbfc;border-top:1px solid #e2e8f0}.dark footer#footer{background:#0f172a;border-top-color:#1e293b}footer#footer>div:first-child{max-width:1200px;margin:0 auto;padding:4rem 2rem 0}footer#footer p.text-sm.font-semibold{font-size:14px!important;font-weight:600;color:#0f172a;margin-bottom:1rem!important}.dark footer#footer p.text-sm.font-semibold{color:#f1f5f9}footer#footer [style*=grid-template-columns]{gap:2rem!important}footer#footer [style*=grid-template-columns] a{font-size:14px!important;padding:5px 0!important;transition:color .15s ease}footer#footer [style*=grid-template-columns] a:hover{color:#10b981!important}#navbar nav a[href*=\"github.com/own-pay\"] span,footer#footer .footer-description{display:none!important}footer#footer>div:first-child>div:last-child{display:none!important}footer#footer::after{content:\"Built by the Community, for the Community.\";display:block;text-align:center;font-size:12px;color:#94a3b8;padding:0 0 1.5rem;margin:0;border-top:1px solid #e2e8f0}.dark footer#footer::after{color:#64748b;border-top-color:#1e293b}#sidebar+div footer,#sidebar+div>div:last-child footer{margin-left:0!important;width:100%!important;border-top:1px solid #e5e7eb}.dark #sidebar+div footer,.dark #sidebar+div>div:last-child footer{border-top-color:#374151}footer{z-index:0!important;position:relative!important;display:block!important}footer [style*=grid-template-columns]{display:grid!important;grid-template-columns:repeat(4,1fr)!important;gap:2rem!important;padding:0 1rem}@media (max-width:767px){footer [style*=grid-template-columns]{grid-template-columns:repeat(2,1fr)!important;gap:1.5rem!important}}footer .flex.items-center.justify-between{display:flex!important;flex-direction:column!important;align-items:center!important;text-align:center!important;gap:1rem!important;padding:1rem!important}@media (min-width:768px){footer .flex.items-center.justify-between{flex-direction:row!important;justify-content:space-between!important;align-items:center!important;text-align:left!important}}.github-stars-badge{display:inline-flex;align-items:center;gap:3px;font-size:12px;font-weight:600;color:#374151;padding:2px 8px;border-radius:9999px;border:1px solid #e5e7eb;background:#f9fafb;line-height:1;margin-left:-4px}.dark .github-stars-badge{color:#d1d5db;border-color:#374151;background:#1f2937}.github-stars-badge svg{width:12px;height:12px;fill:#fbbf24}#changelog-content h1,#changelog-content h2{font-size:1.75rem;font-weight:700;margin-top:2rem;margin-bottom:.5rem;color:#111827}.dark #changelog-content h1{color:#f9fafb}#changelog-content h2{font-size:1.35rem;font-weight:600;margin-top:1.75rem;padding-bottom:.25rem;border-bottom:1px solid #e5e7eb}.dark #changelog-content h2{color:#f9fafb;border-bottom-color:#374151}#changelog-content h3{font-size:1.1rem;font-weight:600;margin-top:1.25rem;margin-bottom:.35rem;color:#374151}.dark #changelog-content h3,.dark #changelog-content li{color:#d1d5db}#changelog-content ul{list-style:disc;padding-left:1.5rem;margin:.5rem 0}#changelog-content li{margin-bottom:.35rem;line-height:1.6;color:#374151}#changelog-content blockquote{border-left:3px solid #0178c8;padding-left:1rem;margin:1rem 0;color:#6b7280;font-style:italic}#changelog-content p{margin:.5rem 0;line-height:1.6}#changelog-content hr{border:0;border-top:1px solid #e5e7eb;margin:1.5rem 0}.dark #changelog-content hr{border-top-color:#374151}#changelog-content a{color:#0178c8;text-decoration:underline}html{color-scheme:light dark;scroll-behavior:smooth}.card,.card-group a,[role=button],a,button{transition:all .25s cubic-bezier(.4,0,.2,1)!important}@media (prefers-reduced-motion:reduce){*,::after,::before{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}html{scroll-behavior:auto}}*{scrollbar-width:thin;scrollbar-color:rgba(156,163,175,.35) transparent}.dark *{scrollbar-color:rgba(156,163,175,.2) transparent}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:rgba(156,163,175,.25);border-radius:9999px}::-webkit-scrollbar-thumb:hover{background:rgba(156,163,175,.45)}.dark ::-webkit-scrollbar-thumb{background:rgba(156,163,175,.15)}.dark ::-webkit-scrollbar-thumb:hover{background:rgba(156,163,175,.35)}#navbar,.sticky,header{backdrop-filter:blur(12px) saturate(180%)!important;-webkit-backdrop-filter:blur(12px) saturate(180%)!important}.homepage-container{max-width:1200px;margin:0 auto;padding:3rem 1.5rem}@media (min-width:768px){.homepage-container{padding:5rem 2rem}}.homepage-hero{display:flex;flex-direction:column;gap:3rem;margin-bottom:5rem;align-items:center}@media (min-width:1024px){.homepage-hero{flex-direction:row;justify-content:space-between;text-align:left}}.hero-content{flex:1.2;max-width:600px}.hero-visual{flex:.8;width:100%;max-width:500px;display:flex;justify-content:center}.hero-pill-badge{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:500;color:#0178c8;background:rgba(15,151,237,.08);padding:6px 14px;border-radius:9999px;border:1px solid rgba(15,151,237,.15);margin-bottom:1.5rem}.dark .hero-pill-badge{color:#7ec8fc;background:rgba(126,200,252,.08);border-color:rgba(126,200,252,.15)}.hero-title{font-size:2.5rem;line-height:1.15;font-weight:800;color:#102963;letter-spacing:-.02em;margin-bottom:1.25rem}@media (min-width:768px){.hero-title{font-size:3.25rem}}.dark .hero-title{color:#fff}.hero-description{font-size:1.125rem;line-height:1.6;color:#4b5563;margin-bottom:2rem}.dark .hero-description{color:#9ca3af}.hero-actions{display:flex;flex-wrap:wrap;gap:1rem}.btn-primary,.btn-secondary{display:inline-flex;align-items:center;justify-content:center;font-weight:600;font-size:15px;padding:10px 22px;border-radius:8px;text-decoration:none!important}.btn-primary{background-color:#0178c8!important;color:#fff!important;border:1px solid #0178c8;box-shadow:0 4px 12px rgba(15,151,237,.15)}.btn-primary:hover{background-color:#007fd6!important;border-color:#007fd6;box-shadow:0 6px 16px rgba(15,151,237,.25);transform:translateY(-1px)}.btn-secondary{background-color:#fff!important;color:#374151!important;border:1px solid #d1d5db}.btn-secondary:hover{background-color:#f9fafb!important;border-color:#9ca3af;transform:translateY(-1px)}.dark .btn-secondary{background-color:#1e293b!important;color:#f3f4f6!important;border-color:#334155}.dark .btn-secondary:hover{background-color:#334155!important;border-color:#475569}.code-mockup-card{background-color:#0b0f19;border:1px solid #1e293b;border-radius:12px;box-shadow:0 20px 40px rgba(0,0,0,.35);width:100%;overflow:hidden;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace}.code-mockup-header{background-color:#121826;border-bottom:1px solid #1e293b;padding:10px 16px;display:flex;align-items:center;justify-content:space-between}.code-mockup-dots{display:flex;gap:6px}.code-mockup-dot{width:10px;height:10px;border-radius:50%}.dot-red{background-color:#ef4444}.dot-yellow{background-color:#f59e0b}.dot-green{background-color:#10b981}.code-mockup-title{color:#6b7280;font-size:12px;font-weight:500}.code-mockup-body{padding:1.25rem;font-size:13.5px;line-height:1.6;color:#e2e8f0;overflow-x:auto}.section-header{text-align:center;max-width:700px;margin:0 auto 3.5rem}.section-title{font-size:2rem;font-weight:700;color:#102963;letter-spacing:-.01em;margin-bottom:.75rem}.dark .section-title{color:#fff}.section-subtitle{font-size:1.125rem;line-height:1.5;color:#4b5563}.dark .section-subtitle{color:#9ca3af}.bento-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:1.5rem;margin-bottom:5rem}@media (min-width:768px){.bento-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.bento-card{background-color:#fff;border:1px solid #e5e7eb;border-radius:12px;padding:1.75rem;display:flex;flex-direction:column;justify-content:space-between;box-shadow:0 4px 6px -1px rgba(0,0,0,.05)}.dark .bento-card{background-color:#0f172a;border-color:#1e293b;box-shadow:0 4px 6px -1px rgba(0,0,0,.2)}.bento-card:hover{border-color:#0178c8;box-shadow:0 10px 15px -3px rgba(15,151,237,.08)}.dark .bento-card:hover{border-color:#7ec8fc;box-shadow:0 10px 15px -3px rgba(126,200,252,.08)}@media (min-width:768px){.bento-col-span-2{grid-column:span 2}}.bento-card-icon{width:42px;height:42px;border-radius:8px;background-color:rgba(15,151,237,.08);display:flex;align-items:center;justify-content:center;color:#0178c8;margin-bottom:1.25rem}.dark .bento-card-icon{background-color:rgba(126,200,252,.08);color:#7ec8fc}.bento-card-title{font-size:1.25rem;font-weight:700;color:#102963;margin-bottom:.5rem}.dark .bento-card-title{color:#fff}.bento-card-desc{font-size:14.5px;line-height:1.5;color:#4b5563}.dark .bento-card-desc{color:#9ca3af}.timeline-section{margin-bottom:5rem}.checkpoints-bar{display:flex;flex-direction:column;gap:1.25rem;border-top:1px solid #e5e7eb;border-bottom:1px solid #e5e7eb;padding:1.25rem 1rem;margin-bottom:4rem;justify-content:space-around;align-items:center;width:100%}@media (min-width:768px){.checkpoints-bar{flex-direction:row;padding:1.5rem 2rem}}.dark .checkpoints-bar{border-color:#1e293b}.checkpoint-item{display:flex;align-items:center;gap:8px;font-size:14.5px;font-weight:500;color:#374151}.dark .checkpoint-item{color:#d1d5db}.checkpoint-icon{color:#10b981}.explorer-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:1.5rem;margin-bottom:5rem}@media (min-width:640px){.explorer-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (min-width:1024px){.explorer-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}.explorer-card{background-color:#fff;border:1px solid #e5e7eb;border-radius:10px;padding:1.5rem;box-shadow:0 4px 6px -1px rgba(0,0,0,.05);display:flex;flex-direction:column;text-decoration:none!important;transition:all .25s cubic-bezier(.4,0,.2,1)!important;position:relative;overflow:hidden}.dark .explorer-card{background-color:#0f172a;border-color:#1e293b;box-shadow:0 4px 6px -1px rgba(0,0,0,.2)}.explorer-card:hover{transform:translateY(-2px);box-shadow:0 10px 15px -3px rgba(0,0,0,.08);border-color:#cbd5e1}.dark .explorer-card:hover{border-color:#334155;box-shadow:0 10px 15px -3px rgba(0,0,0,.25)}.explorer-card::before{content:\"\";position:absolute;top:0;left:0;right:0;height:3px;background-color:transparent}.explorer-card-blue::before{background-color:#0178c8}.explorer-card-green::before{background-color:#10b981}.explorer-card-purple::before{background-color:#7e3aed}.explorer-card-amber::before{background-color:#f59e0b}.explorer-card-navy::before{background-color:#102963}.explorer-card-pink::before{background-color:#ec4899}.custom-footer-socials a,.explorer-icon-wrapper{display:flex;align-items:center;justify-content:center;border-radius:6px}.explorer-icon-wrapper{width:36px;height:36px;margin-bottom:1rem}.explorer-icon-blue{background-color:rgba(15,151,237,.08);color:#0178c8}.explorer-icon-green{background-color:rgba(16,185,129,.08);color:#10b981}.explorer-icon-purple{background-color:rgba(126,58,237,.08);color:#7e3aed}.explorer-icon-amber{background-color:rgba(245,158,11,.08);color:#f59e0b}.explorer-icon-navy{background-color:rgba(16,41,99,.08);color:#102963}.explorer-icon-pink{background-color:rgba(236,72,153,.08);color:#ec4899}.dark .explorer-icon-navy{background-color:rgba(126,200,252,.08);color:#7ec8fc}.explorer-title{font-size:1.1rem;font-weight:700;color:#102963;margin-bottom:.5rem}.dark .explorer-title{color:#fff}.explorer-desc{font-size:13.5px;line-height:1.5;color:#4b5563}.dark .explorer-desc{color:#9ca3af}.bento-mini-table{width:100%;border-collapse:collapse;font-size:12px;margin-top:1rem;border:1px solid #e5e7eb;border-radius:6px;overflow:hidden;background-color:#f9fafb}.dark .bento-mini-table{border-color:#1e293b;background-color:#0b0f19}.bento-mini-table td,.bento-mini-table th{padding:8px 12px;text-align:left;border-bottom:1px solid #e5e7eb}.dark .bento-mini-table td,.dark .bento-mini-table th{border-bottom-color:#1e293b}.bento-mini-table th{background-color:#f3f4f6;font-weight:600;color:#374151}.dark .bento-mini-table th{background-color:#121826;color:#9ca3af}.custom-footer{margin-top:4rem;border-top:1px solid #e2e8f0;padding-top:0;padding-bottom:0;width:100%;background:#fafbfc}.dark .custom-footer{border-top-color:#1e293b;background:#0f172a}.custom-footer-brand-row{display:flex;flex-direction:column;gap:1rem;margin-bottom:2rem}@media (min-width:768px){.custom-footer-brand-row{flex-direction:row;justify-content:space-between;align-items:flex-start}}.custom-footer-brand{gap:.5rem}.custom-footer-logo-row img{height:24px}.custom-footer-desc{display:none}.custom-footer-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:3rem;max-width:1200px;margin:0 auto;padding:0 2rem 2rem}@media (max-width:767px){.custom-footer-grid{grid-template-columns:1fr 1fr;gap:2rem;padding:0 1.5rem 2rem}}.custom-footer-col{display:flex;flex-direction:column;gap:0}.custom-footer-heading{font-size:14px;font-weight:600;color:#0f172a;margin-bottom:1rem;letter-spacing:0;text-transform:none}.dark .custom-footer-heading,.dark .custom-footer-link:hover{color:#f1f5f9}.custom-footer-link{display:block;font-size:14px;color:#64748b;padding:6px 0;text-decoration:none!important;transition:color .15s ease;line-height:1.5}.custom-footer-link:hover{color:#0f172a}.dark .custom-footer-link{color:#94a3b8}.custom-footer-bottom{max-width:1200px;margin:0 auto;justify-content:space-between}@media (max-width:767px){.custom-footer-bottom{flex-direction:column;gap:1rem;text-align:center;padding:1.5rem}}.dark .custom-footer-bottom{border-color:#1e293b}.custom-footer-socials{gap:8px}.custom-footer-socials a{width:32px;height:32px;background:0 0;color:#94a3b8;transition:all .15s ease}.custom-footer-socials a:hover{background:#f1f5f9;color:#0f172a}.dark .custom-footer-socials a:hover{background:#1e293b;color:#f1f5f9}.custom-footer-bottom{border-top:1px solid #e5e7eb;padding:2rem 2rem 1.5rem;display:flex;flex-direction:column;gap:1.5rem;align-items:flex-start;text-align:left;width:100%}@media (min-width:768px){.custom-footer-bottom{flex-direction:row;justify-content:space-between;text-align:left;align-items:flex-start}}.custom-footer-brand{max-width:360px;display:flex;flex-direction:column;align-items:flex-start}.custom-footer-logo-row{display:flex;align-items:center;gap:10px;margin-bottom:.75rem}.custom-footer-copyright{font-size:12.5px;color:#9ca3af;margin-top:.5rem}.custom-footer-socials{display:flex;gap:1.25rem;align-items:center}@media (max-width:767px){.custom-footer-socials{margin-top:1rem}}.custom-footer-social-link{color:#4b5563;transition:color .2s ease}.custom-footer-social-link:hover{color:#0178c8}.dark .custom-footer-social-link{color:#9ca3af}.dark .custom-footer-social-link:hover{color:#7ec8fc}#page-title,h1,h2,h3,h4{text-wrap:balance}p{text-wrap:pretty}@media (max-width:767px){table{min-width:0!important}pre{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}}.gateway-router-card{background-color:#0b0f19;border:1px solid #1e293b;border-radius:12px;box-shadow:0 20px 40px rgba(0,0,0,.35);width:100%;overflow:hidden;font-family:'Inter',sans-serif;color:#e2e8f0}.router-header{background-color:#121826;border-bottom:1px solid #1e293b;padding:12px 18px;display:flex;align-items:center;justify-content:space-between}.status-indicator{display:flex;align-items:center;gap:8px}.pulse-dot{width:8px;height:8px;background-color:#10b981;border-radius:50%;box-shadow:0 0 0 0 rgba(16,185,129,.7);animation:pulse-green 2s infinite}.status-text{font-size:11px;font-weight:600;color:#10b981;text-transform:uppercase;letter-spacing:.05em}.router-title{color:#64748b;font-size:13px;font-weight:500}.router-body{padding:24px}.flow-node,.route-flow{display:flex;align-items:center}.route-flow{justify-content:space-between;background-color:#121826;border:1px solid #1e293b;border-radius:8px;padding:16px;margin-bottom:24px}.flow-node{flex-direction:column;gap:6px;font-size:12px;color:#94a3b8}.flow-node svg{color:#64748b}.active-node{color:#38bdf8;font-weight:600}.active-node svg{color:#38bdf8;filter:drop-shadow(0 0 8px rgba(56,189,248,.5))}.flow-arrow{color:#334155;font-size:16px;animation:slide-right 2s infinite linear}.gateway-list{display:flex;flex-direction:column;gap:12px}.gateway-info,.gateway-item{display:flex;align-items:center}.gateway-item{justify-content:space-between;background-color:rgba(30,41,59,.4);border:1px solid rgba(226,232,240,.05);border-radius:8px;padding:12px 16px}.gateway-info{gap:10px}.gateway-dot{width:6px;height:6px;border-radius:50%}.status-active{background-color:#10b981;box-shadow:0 0 8px #10b981}.gateway-badge{font-size:11px;background-color:rgba(56,189,248,.1);color:#38bdf8;padding:2px 8px;border-radius:4px;font-weight:500}"}],"page":{"pagePath":"people/roles","slug":"/people/roles","pageMetadata":{"title":"Roles and permissions","description":"Built-in roles, the permission matrix, and how to assign roles to staff members per brand in OwnPay.","keywords":"roles, permissions, RBAC, access control, permission matrix, super admin","sidebarTitle":"Roles","icon":"shield-check","href":"/people/roles"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Built-in roles, the permission matrix, and how to assign roles to staff members per brand in OwnPay.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,li:`li`,ol:`ol`,p:`p`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Heading,Table,Warning}=_components;if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`OwnPay uses role-based access control (RBAC) to determine what each staff member can see and do. Roles are assigned per brand, so the same person can be a Manager on one brand and a Viewer on another. For authentication details, see `,_jsx(_components.a,{href:`/security/login`,children:`Login and authentication`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`built-in-roles`,children:`Built-in roles`}),`\n`,_jsx(_components.p,{children:`OwnPay ships with four built-in roles. Custom roles are not yet supported in v0.2.0.`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Role`}),_jsx(_components.th,{children:`Scope`}),_jsx(_components.th,{children:`Typical use`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Super Admin`})}),_jsx(_components.td,{children:`Global - all brands, all settings`}),_jsx(_components.td,{children:`Server owner who installed OwnPay`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Admin`})}),_jsx(_components.td,{children:`Per-brand - full access within assigned brands`}),_jsx(_components.td,{children:`Business manager who controls one or more brands`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Manager`})}),_jsx(_components.td,{children:`Per-brand - can manage payments and view reports`}),_jsx(_components.td,{children:`Operations lead handling day-to-day transactions`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.strong,{children:`Viewer`})}),_jsx(_components.td,{children:`Per-brand - read-only access to transactions and reports`}),_jsx(_components.td,{children:`Auditor or accountant who needs visibility only`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`permission-matrix`,children:`Permission matrix`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Permission`}),_jsx(_components.th,{style:{textAlign:`center`},children:`Super Admin`}),_jsx(_components.th,{style:{textAlign:`center`},children:`Admin`}),_jsx(_components.th,{style:{textAlign:`center`},children:`Manager`}),_jsx(_components.th,{style:{textAlign:`center`},children:`Viewer`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`View brands`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage brands`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage staff`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage roles`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`View customers`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage customers`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`View transactions`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage transactions`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage refunds`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`View invoices`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage invoices`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`View payment links`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage payment links`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage gateways`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`View reports`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`View audit log`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage domains`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage plugins`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage system settings`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Manage API keys`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Balance verification`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`System update`}),_jsx(_components.td,{style:{textAlign:`center`},children:`✅`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`}),_jsx(_components.td,{style:{textAlign:`center`},children:`❌`})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`how-to-assign-a-role`,children:`How to assign a role`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Go to `,_jsx(_components.strong,{children:`People`}),` → `,_jsx(_components.strong,{children:`Staff`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Edit`}),` on the staff member’s row.`]}),`\n`,_jsxs(_components.li,{children:[`Select the `,_jsx(_components.strong,{children:`role`}),` from the dropdown.`]}),`\n`,_jsxs(_components.li,{children:[`Choose the `,_jsx(_components.strong,{children:`brands`}),` this role applies to.`]}),`\n`,_jsxs(_components.li,{children:[`Click `,_jsx(_components.strong,{children:`Save`}),`.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`The role takes effect the next time the staff member loads a page. If they are currently logged in, ask them to refresh the browser or log out and back in.`}),`\n`,_jsx(Heading,{level:`2`,id:`per-brand-role-assignment`,children:`Per-brand role assignment`}),`\n`,_jsx(_components.p,{children:`The same staff member can hold different roles on different brands. When you edit a staff member, you see a list of all brands with a role selector next to each one. This lets you give someone Admin access on Brand A but only Viewer access on Brand B.`}),`\n`,_jsx(Warning,{children:_jsx(_components.p,{children:`Do not give the Admin or Super Admin role to staff who only need to view reports. Use the Viewer role instead and follow the principle of least privilege.`})}),`\n`,_jsx(Heading,{level:`2`,id:`related-pages`,children:`Related Pages`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/people/staff`,children:`Staff`}),` - invite and manage team members`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/security/login`,children:`Login and authentication`}),` - how admin authentication works`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/reports/audit-log`,children:`Audit log`}),` - monitor actions taken by different roles`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/people/brands`,children:`Brands`}),` - create brands and assign staff to them`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"codeStyling":{"theme":{"light":"github-light","dark":"github-dark"}},"config":{},"pageMetadata":{"title":"Roles and permissions","description":"Built-in roles, the permission matrix, and how to assign roles to staff members per brand in OwnPay.","keywords":"roles, permissions, RBAC, access control, permission matrix, super admin","sidebarTitle":"Roles","icon":"shield-check","href":"/people/roles"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Built-in roles","slug":"built-in-roles","depth":2,"children":[]},{"title":"Permission matrix","slug":"permission-matrix","depth":2,"children":[]},{"title":"How to assign a role","slug":"how-to-assign-a-role","depth":2,"children":[]},{"title":"Per-brand role assignment","slug":"per-brand-role-assignment","depth":2,"children":[]},{"title":"Related Pages","slug":"related-pages","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/ownpay/bc03f67168c469e9/script.js"],"subdomain":"ownpay","siteName":"OwnPay","title":"Roles and permissions - OwnPay","relatedPagesConfig":{"enabled":true,"limit":5,"mode":"automatic"},"contextualStarterQuestions":[{"_id":"6a8d3b6e3a3ee223ca159617","deploymentId":"6a4eb393b0b17ad26d4e5eea","questionText":"How do I assign roles to staff?","status":"active","generatedBy":"contextual","path":"people/roles","createdAt":"2026-08-25T06:51:26.893Z","updatedAt":"2026-08-25T06:51:26.893Z","__v":0},{"_id":"6a8d3b6e3a3ee223ca159618","deploymentId":"6a4eb393b0b17ad26d4e5eea","questionText":"What can a Manager role do?","status":"active","generatedBy":"contextual","path":"people/roles","createdAt":"2026-08-25T06:51:26.893Z","updatedAt":"2026-08-25T06:51:26.893Z","__v":0},{"_id":"6a8d3b6e3a3ee223ca159619","deploymentId":"6a4eb393b0b17ad26d4e5eea","questionText":"Can one person have different roles?","status":"active","generatedBy":"contextual","path":"people/roles","createdAt":"2026-08-25T06:51:26.893Z","updatedAt":"2026-08-25T06:51:26.893Z","__v":0}],"navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{"en":{"href":"/people/roles","matchLevel":0},"zh":{"href":"/zh/introduction","matchLevel":4}}},"lastModified":"2026-08-25T06:51:08.989Z","gitLastModified":"2026-08-25T12:02:04.000Z","originalFileLocation":"people/roles.mdx","locale":"en"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Built-in roles, the permission matrix, and how to assign roles to staff members per brand in OwnPay.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OwnPay\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003cmeta data-mint-head name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/ownpay/JIvzQy_7GPsgYuLC/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/ownpay/JIvzQy_7GPsgYuLC/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/ownpay/JIvzQy_7GPsgYuLC/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/ownpay/JIvzQy_7GPsgYuLC/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/ownpay/JIvzQy_7GPsgYuLC/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/ownpay/JIvzQy_7GPsgYuLC/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/ownpay/JIvzQy_7GPsgYuLC/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/ownpay/JIvzQy_7GPsgYuLC/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/ownpay/JIvzQy_7GPsgYuLC/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Roles and permissions - OwnPay\">\u003cmeta data-mint-head property=\"og:description\" content=\"Built-in roles, the permission matrix, and how to assign roles to staff members per brand in OwnPay.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OwnPay Documentation\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://ownpay.org/docs/people/roles\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ownpay.mintlify.app/_mintlify/api/og/v2?division=People\u0026amp;title=Roles+and+permissions\u0026amp;description=Built-in+roles%2C+the+permission+matrix%2C+and+how+to+assign+roles+to+staff+members+per+brand+in+OwnPay.\u0026amp;theme=104e90172858186ecb085a5d\u0026amp;signature=4ef68d57689b7e6ba13483f123e52a06cd1f3479d5345bfc8760c67b40255ed3\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Roles and permissions - OwnPay\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Built-in roles, the permission matrix, and how to assign roles to staff members per brand in OwnPay.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ownpay.mintlify.app/_mintlify/api/og/v2?division=People\u0026amp;title=Roles+and+permissions\u0026amp;description=Built-in+roles%2C+the+permission+matrix%2C+and+how+to+assign+roles+to+staff+members+per+brand+in+OwnPay.\u0026amp;theme=104e90172858186ecb085a5d\u0026amp;signature=4ef68d57689b7e6ba13483f123e52a06cd1f3479d5345bfc8760c67b40255ed3\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/ownpay/JIvzQy_7GPsgYuLC/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OwnPay\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#0F97ED\">\u003cmeta data-mint-head name=\"og:locale\" content=\"en_US\">\u003cmeta data-mint-head name=\"fb:app_id\" content=\"2933285433703137\">\u003cmeta data-mint-head name=\"og:image:alt\" content=\"OwnPay - Open-Source, Self-Hosted Payment Gateway Platform\">\u003clink data-mint-head rel=\"canonical\" href=\"https://ownpay.org/docs/people/roles\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/people/roles.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://ownpay.org/#organization\",\"name\":\"OwnPay\",\"legalName\":\"OwnPay\",\"url\":\"https://ownpay.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://ownpay.org/docs/logo/light.svg\"},\"sameAs\":[\"https://github.com/own-pay/OwnPay\",\"https://x.com/ownpayorg\",\"https://youtube.com/@ownpayorg\",\"https://facebook.com/ownpay.org\",\"https://github.com/own-pay\",\"https://www.npmjs.com/package/ownpay-nodejs\",\"https://marketplace.whmcs.com/product/8845-ownpay-whmcs\",\"https://github.com/own-pay/OwnPay-Mobile-App\",\"https://facebook.com/groups/ownpay.org\"]},{\"@type\":\"WebSite\",\"@id\":\"https://ownpay.org/docs#website\",\"name\":\"OwnPay\",\"url\":\"https://ownpay.org/docs\",\"publisher\":{\"@id\":\"https://ownpay.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://ownpay.org/docs/people/roles#webpage\",\"url\":\"https://ownpay.org/docs/people/roles\",\"name\":\"Roles and permissions\",\"description\":\"Built-in roles, the permission matrix, and how to assign roles to staff members per brand in OwnPay.\",\"dateModified\":\"2026-08-25T12:02:04.000Z\",\"isPartOf\":{\"@id\":\"https://ownpay.org/docs#website\"},\"breadcrumb\":{\"@id\":\"https://ownpay.org/docs/people/roles#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://ownpay.org/docs/people/roles#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"People\",\"item\":\"https://ownpay.org/docs/people/brands\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Roles and permissions\",\"item\":\"https://ownpay.org/docs/people/roles\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://ownpay.org/docs/people/roles#article\",\"headline\":\"Roles and permissions\",\"name\":\"Roles and permissions\",\"description\":\"Built-in roles, the permission matrix, and how to assign roles to staff members per brand in OwnPay.\",\"url\":\"https://ownpay.org/docs/people/roles\",\"mainEntityOfPage\":{\"@id\":\"https://ownpay.org/docs/people/roles#webpage\"},\"dateModified\":\"2026-08-25T12:02:04.000Z\",\"publisher\":{\"@id\":\"https://ownpay.org/#organization\"},\"isPartOf\":{\"@id\":\"https://ownpay.org/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OwnPay\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OwnPay","nav":{"global":{"anchors":[{"anchor":"Changelog","icon":"history","href":"/resources/changelog"}]},"languages":[{"language":"en","default":true,"tabs":[{"tab":"Documentation","icon":"book","groups":[{"group":"Get Started","icon":"rocket","pages":[{"title":"OwnPay: Self-Hosted Payment Orchestrator","sidebarTitle":"Introduction","icon":"bolt","href":"/introduction"},{"title":"Quickstart - Accept Your First Payment in 5 Minutes","sidebarTitle":"Quickstart","icon":"rocket","href":"/quickstart"},{"title":"Install OwnPay on Shared Hosting, VPS, or Docker","sidebarTitle":"Installation","icon":"feather","href":"/installation"}]},{"group":"Fundamentals","icon":"stack-2","pages":[{"title":"How OwnPay Works","sidebarTitle":"How OwnPay Works","icon":"brain","href":"/fundamentals/how-ownpay-works"},{"title":"Brands - Multi-Tenant Merchant Isolation","sidebarTitle":"Brands","icon":"building-store","href":"/fundamentals/brands"},{"title":"Payment Flow - Transaction Statuses and Lifecycle","sidebarTitle":"Payment Flow","icon":"cash","href":"/fundamentals/payment-flow"},{"title":"Gateways - Payment Provider Integrations","sidebarTitle":"Gateways","icon":"wallet","href":"/fundamentals/gateways"},{"title":"Ledger - Double-Entry Bookkeeping for Payments","sidebarTitle":"Ledger","icon":"book","href":"/fundamentals/ledger"},{"title":"Plugin System - Extensible Architecture","sidebarTitle":"Plugins","icon":"puzzle","href":"/fundamentals/plugins"},{"title":"Custom Domains - White-Label Checkout URLs","sidebarTitle":"Domains","icon":"world","href":"/fundamentals/domains"}]},{"group":"People","icon":"users","pages":[{"title":"Create and manage brands","sidebarTitle":"Brands","icon":"building-store","href":"/people/brands"},{"title":"Invite and manage staff","description":"How to invite team members, assign them to brands and roles, and manage their accounts in the OwnPay admin dashboard.","sidebarTitle":"Staff","icon":"user-plus","href":"/people/staff"},{"title":"Roles and permissions","sidebarTitle":"Roles","icon":"shield-check","href":"/people/roles"},{"title":"Customer profiles","description":"How customer profiles are auto-created, what fields they store, and how to search and view customer data in OwnPay.","sidebarTitle":"Customers","icon":"id","href":"/people/customers"}]},{"group":"Payments","icon":"credit-card","pages":[{"title":"Create payment links","sidebarTitle":"Payment Links","icon":"link","href":"/payments/payment-links"},{"title":"Transaction management","sidebarTitle":"Transactions","icon":"receipt","href":"/payments/transactions"},{"title":"Issue refunds","sidebarTitle":"Refunds","icon":"rotate","href":"/payments/refunds"},{"title":"Create and manage invoices","sidebarTitle":"Invoices","icon":"file-text","href":"/payments/invoices"},{"title":"Ledger UI","sidebarTitle":"Ledger","icon":"book","href":"/payments/ledger"}]},{"group":"Gateways \u0026 Currencies","icon":"wallet","pages":[{"title":"Configure payment gateways","sidebarTitle":"Gateways","icon":"settings","href":"/gateways/configuration"},{"title":"Manual payment methods","sidebarTitle":"Manual Methods","icon":"cash","href":"/gateways/manual-methods"},{"title":"Manage currencies and exchange rates","sidebarTitle":"Currencies","icon":"coins","href":"/gateways/currencies"},{"title":"SMS auto-verification","sidebarTitle":"SMS Verification","icon":"message-circle","href":"/gateways/sms-verification"}]},{"group":"Appearance","icon":"palette","pages":[{"title":"Brand identity settings","sidebarTitle":"Branding","icon":"brush","href":"/appearance/branding"},{"title":"Checkout themes","sidebarTitle":"Themes","icon":"palette","href":"/appearance/themes"},{"title":"Landing page configuration","sidebarTitle":"Landing Page","icon":"app-window","href":"/appearance/landing-page"}]},{"group":"Notifications","icon":"bell","pages":[{"title":"Email Notifications","sidebarTitle":"Email","icon":"mail","href":"/notifications/email"},{"title":"Webhooks","sidebarTitle":"Webhooks","icon":"webhook","href":"/notifications/webhooks"},{"title":"Telegram Notifications","sidebarTitle":"Telegram","icon":"send","href":"/notifications/telegram"},{"title":"SMS Center","sidebarTitle":"SMS Center","icon":"message","href":"/notifications/sms-center"}]},{"group":"Mobile","icon":"device-mobile","pages":[{"title":"Companion App","sidebarTitle":"Companion App","icon":"device-mobile","href":"/mobile/companion-app"},{"title":"Devices","sidebarTitle":"Devices","icon":"device-mobile","href":"/mobile/devices"},{"title":"SMS Templates","sidebarTitle":"SMS Templates","icon":"file-code","href":"/mobile/sms-templates"}]},{"group":"Reports \u0026 Finance","icon":"chart-bar","pages":[{"title":"Dashboard","sidebarTitle":"Dashboard","icon":"layout-dashboard","href":"/reports/dashboard"},{"title":"Audit Log","sidebarTitle":"Audit Log","icon":"scroll","href":"/reports/audit-log"},{"title":"Balance Verification","sidebarTitle":"Balance Verification","icon":"scale","href":"/reports/balance-verification"},{"title":"Disputes","sidebarTitle":"Disputes","icon":"alert-circle","href":"/reports/disputes"}]},{"group":"System","icon":"settings","pages":[{"title":"Settings","sidebarTitle":"Settings","icon":"settings","href":"/system/settings"},{"title":"Domains","sidebarTitle":"Domains","icon":"world","href":"/system/domains"},{"title":"Plugins","sidebarTitle":"Plugins","icon":"puzzle","href":"/system/plugins"},{"title":"Addons","sidebarTitle":"Addons","icon":"package","href":"/system/addons"},{"title":"Languages","sidebarTitle":"Languages","icon":"language","href":"/system/languages"},{"title":"System Update","sidebarTitle":"System Update","icon":"refresh","href":"/system/system-update"}]},{"group":"Security \u0026 Access","icon":"lock","pages":[{"title":"Login","sidebarTitle":"Login","icon":"login","href":"/security/login"},{"title":"Two-Factor Authentication","sidebarTitle":"Two-Factor Authentication","icon":"shield","href":"/security/two-factor"},{"title":"Password Reset","sidebarTitle":"Password Reset","icon":"key","href":"/security/password-reset"},{"title":"API Keys","sidebarTitle":"API Keys","icon":"key","href":"/security/api-keys"},{"title":"Developer Hub","sidebarTitle":"Developer Hub","icon":"terminal","href":"/security/developer-hub"},{"title":"My Account","sidebarTitle":"My Account","icon":"user","href":"/security/my-account"}]},{"group":"Checkout","icon":"shopping-cart","pages":[{"title":"Customer Experience","sidebarTitle":"Customer Experience","icon":"shopping-bag","href":"/checkout/customer-experience"}]}]},{"tab":"API Reference","icon":"terminal-2","pages":[{"title":"API Reference","href":"/api/overview"}]},{"tab":"Developer","icon":"code","pages":[{"title":"Developer","href":"/developer/quickstart"}]},{"tab":"Resources","icon":"folder","pages":[{"title":"Resources","href":"/resources/features"}]}]},{"language":"zh","pages":[{"title":"zh","href":"/zh/introduction"}]}]},"title":"Roles and permissions - OwnPay","buildId":"dpl_3rfzHPCtRhDFBbetXZ3oLkN5tjmA","deploymentId":"dpl_3rfzHPCtRhDFBbetXZ3oLkN5tjmA","dynamics":["10e4515597"],"chunks":["BannerMarkdown-3zwwRfY7.js","dist-DMuJXOAm.js","lib--scc4DXi.js","lib-B8HbPgcC.js","clsx-eUAxaTXI.js","html-void-elements-mCSPHezU.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js"]}