DWPlatform Tutorials

Stakeholders & Roles

Who uses the platform, and the roles that govern what they can do. Because DWPlatform is a multi-tenant SaaS, “stakeholder” splits into two layers: the SaaS layer (the operator and the customer organizations) and the tenant layer (the people inside a customer who do office work).

SaaS-layer stakeholders

StakeholderWho they areWhat they do
Platform Operator / Super-AdminThe company running DWPlatformRuns the Platform Console: creates tenants, assigns plans, provisions databases, manages the catalog, monitors usage/billing. Implicitly Admin of every service.
Tenant (organization)A subscribing customer orgThe billing & isolation boundary — owns its brand, users, data, plan and entitlements.
Tenant Owner / AdminThe customer’s own administratorSelf-service admin of their tenant: branding, module enablement, subscription/seats, and — via the seat-aware path — creating users and assigning roles.
Billing / Account contactThe tenant’s finance/owner contactViews plan, subscription lifecycle, add-ons, billing events, storage usage.

Tenant-layer stakeholders (people inside an organization)

StakeholderWhat they doPrimary modules
End User / EmployeeEveryday work: email, chat, files, meetings, tasks, news, phone lookup, requests, KPI entryShell + all entitled modules
Department ManagerOversees a department; approves requests routed to them; department calendar & tasksWorkFlow, KPIS, Calendar, HR (read)
SupervisorOversight without full admin — reviews/monitors within scopeCross-module
HR / Organization AdminMaintains people registry & org structure: persons, departments, jobs, ranks, telephonesHR / Organization
Correspondence Receive DeskRegisters incoming official correspondence and routes itDWMail
Correspondence Review DeskReviews & approves correspondenceDWMail
Correspondence Secretary DeskFinal processing, signing/stamping, archivingDWMail
Approver / SignerApproves workflow requests or signs correspondence (holds an e-signature)WorkFlow, DWMail
Meeting OrganizerSchedules, runs, records meetings; shares recordingsMeetings
News Publisher / EditorWrites and publishes internal newsNews
KPI Auditor / OwnerOwns activities/indicators, enters measurements, reportsKPIS
Content ContributorUploads/shares files, comments, @mentionsDrive, Collaboration Hub

System / non-human actors

Service-to-service caller

A backend service calling another with a system JWT (e.g. WorkFlow pushing an approval to the Hub). Runs with elevated, tenant-scoped, deny-by-default access.

Bus producers / consumers

Modules publishing notifications, work-item changes and index events; the Hub consuming them. Every event carries the tenant id.

Mail gateway

Ingests/relays real email into the correspondence backend (DWMail’s own mail server).

Desktop clients

The Drive desktop sync client and the Windows tray notifier — authenticated deliverables that talk to the backends.

How permissions actually work

DWPlatform does not use one flat role list. Understanding the mechanics is essential for QC:

Layer 1

Global roles

Broad labels such as Admin, User, Manager. A user can hold one or more.

Layer 2

Per-service roles

The real unit is a triple (User × Role × Service). Someone can be Admin in Identity but only User in KPIS.

In the token

role:{Service}=Role claims

On login the token carries role:DWPlatform.KPIS=Admin-style claims; every module authorizes off its own claim.

Operator

SuperAdmin is implicitly Admin

A platform Super-Admin is treated as Admin for every service, even without an explicit per-service row.

Within a tenant

Tenant membership

Separate from service roles — it records a user’s standing inside a tenant (Owner / Admin / User).

Meaning

401 vs 403

401 = not signed in. 403 = signed in, but lacks the required role:{Service}=… claim.

Module visibility ≠ authorization. Whether a module even appears in a tenant’s rail is governed by entitlements (the plan + operator/tenant-admin toggles). Roles decide what you can do inside an entitled module.

Master role catalogue

Core platform roles (live)

RoleGrantsWhere it matters
AdminFull access to all featuresEvery module
UserRegular user, limited accessEvery module
ManagerDepartment-level featuresWorkFlow, KPIS, HR, Calendar
SupervisorOversight capabilitiesCross-module
HRAdminElevated HR privilegesHR / Organization

Correspondence desk roles (DWMail)

RoleGrants
ReceiveDeskHandles incoming correspondence (registration & routing)
ReviewDeskReviews and approves correspondence
SecretaryDeskFinal processing & archiving (sign / stamp)

Calendar & module-specific roles

RoleGrants
CalendarAdmin / CalendarManagerCalendar administration / department-level calendar access
role:DWPlatform.News=Admin | ContentManagementNews authoring — full admin vs content only
role:DWPlatform.Media=AdminDrive administration (quotas, quarantine, templates)
Drive item roles: Viewer / Downloader / EditorPer-file access: view-only / download / full edit
KPIS Auditor / IsKpiAdminOwns/edits activities & enters values / manages all activities

SaaS control-plane roles

RoleGrants
SuperAdmin / Platform OperatorRuns the SaaS across all tenants; implicitly Admin everywhere
Tenant Owner / AdminSelf-service admin of one tenant

Assigning & administering roles — who, what & how

There are two separate role systems, set in two different places by two different authorities. Knowing which is which is the whole game:

System 1

Tenant membership role

A single value per user inside a tenantTenantAdmin or User (the Owner is a locked TenantAdmin). It’s the seat: creating a user or promoting to admin consumes a plan seat.

System 2

Service roles

The real capability unit — a (user × role × service) row that becomes a role:DWPlatform.{Service}=Role claim in the token. This is what each module authorizes against. Not seat-limited.

Who is allowed to set roles

ActionWho can do itEnforced by
Create a user + set their tenant role; change a user’s tenant role (Member ↔ Admin); remove a userTenant Admin of that tenant, or a platform SuperAdminpolicy RequireTenantAdmin (claim tenant_role=TenantAdmin or is_superadmin=true). Seat-capped — returns 409 at the plan’s user/admin limit.
Assign / revoke a service role (e.g. give someone ReceiveDesk on DWMail)A user with global Admin / Manager / HRAdmin, or the Identity-Admin service role (role:DWPlatform.Identity=Admin); SuperAdmin passes implicitlypolicy RequireManagerOrAdmin. Not seat-capped and does not require the module be entitled.
Create a brand-new role name (for roles not in the seeded catalogue)Same as above (RequireManagerOrAdmin)POST /api/v1/roles. Roles are free-form; the catalogue below is just what’s seeded.
Rule of thumb. The Tenant Owner/Admin onboards people and decides who is an admin (seats). Day-to-day capability roles (desk roles, HRAdmin, external-send, etc.) are handed out by anyone holding Admin/Manager in Identity. A SuperAdmin can do either, in any tenant.

How to set them — the click-path

User & role administration lives in the IAM app (DWPlatform.Identity.FE — the “Identity / Users” area of the shell admin). Two screens:

GoalSteps
Add a new userIdentity → UsersAdd user → email (+ optional password/username) and pick Member or Admin → Save. Blocked with a “seat cap reached” message if the plan is full.
Make someone a tenant admin (or demote)Identity → Users → the user’s row → Change role → choose Admin (TenantAdmin) / Member (User) → Confirm. (The Owner can’t be demoted; the last admin can’t be removed.)
Grant a capability (service) roleIdentity → Users → open the user (User detail) → Roles card → Add → pick the Service (e.g. DWMail/Correspondence) → pick the Role (e.g. ReceiveDesk) → Assign. Revoke with the trash icon next to the role. The user must sign out & back in for the new claim to take effect.

What to set for each stakeholder (setup recipes)

Assign these as service roles on the named service unless noted. “Any employee” means no role is needed beyond being a tenant member.

To make someone a…AssignOn service
Everyday employee— (tenant Member only)
Tenant administratorTenant role Admin (Users → Change role)tenant membership
Correspondence Receive DeskReceiveDeskDWMail / Correspondence
Correspondence Review DeskReviewDeskDWMail / Correspondence
Correspondence Secretary Desk (sign/stamp/archive)SecretaryDesk + an uploaded e-signature (Settings → Signatures)DWMail / Correspondence
Mail manager / office manager (manage others’ items)Admin or Manager (mail) / OfficeManager*DWMail / Correspondence
External-send office (send outside the org)ExternalSendingOffice* or Director* — or simply AdminDWMail / Correspondence
HR / Organization adminHRAdminHR / Identity
Calendar admin / managerCalendarAdmin / CalendarManagerCalendar
News publisherAdmin or ContentManagementNews
Drive admin (quotas, quarantine)AdminMedia
KPI auditor / adminAuditor* / AdminKPIS
Module super-user (one module)Adminthat module
*Roles not in the seeded catalogue (e.g. ExternalSendingOffice, Director, OfficeManager, Auditor) don’t exist until an Identity-Admin creates the role name once (POST /api/v1/roles, or the “new role” action in the IAM app) and then assigns it to the service. The seeded roles are Admin, User, Manager, Supervisor, HRAdmin, ReceiveDesk, ReviewDesk, SecretaryDesk, CalendarAdmin, CalendarManager. For external send specifically, granting Admin on DWMail (or being a SuperAdmin) already works with no custom role — see the Email guide §12.

Role → module reach (quick map)

● full/primary · ◐ partial/scoped · ○ minimal or self-only. Module visibility still depends on tenant entitlements.

RoleIdentityHRShell /adminDWMailWorkFlowKPISChatMeetDriveNews
SuperAdmin● Console
Tenant Admin● tenant
Admin
Manager● approve● dept
HRAdmin
Correspondence desks● desk flow
User (employee)○ self○ view● mailbox● request● contribute● read