Class SystemSupportScopes
- Namespace
- Tharga.Team
- Assembly
- Tharga.Team.dll
System-level scope constants for support cases: the unassigned queue, and reading or answering across every team.
public static class SystemSupportScopes
- Inheritance
-
SystemSupportScopes
- Inherited Members
Remarks
These exist because a team scope cannot govern either population. support:read is held
against a team, so a case with no team has nothing to hold it against, and a caller who belongs to no
team holds it nowhere.
Deliberately separate from the team scopes rather than a widening of them. Holding
support:read on one team must never confer sight of unassigned cases, which may concern any tenant
or none: that would let a member of the smallest team read everything that arrived by mail. Granting
these is a decision about the whole product, which is what a system scope is for.
And deliberately two pairs rather than one. The unassigned queue and every team's cases are different populations, so holding one must not confer the other — the same reasoning that keeps both off the team scopes. AllRead and AllManage are the strongest grants in the package, which is why they are nameable and grantable on their own.
Fields
AllManage
Reply to, close, reopen and hand over a support case in any team, without belonging to it.
public const string AllManage = "support:all:manage"
Field Value
Remarks
Satisfies a read as well, exactly as support:manage does on a team — whoever may answer a case
may read it.
It does not grant assignment. Assigning decides which tenant an unassigned case and its whole transcript become part of, which is Manage's operation and stays there.
AllRead
Read and list support cases in any team, without belonging to it.
public const string AllRead = "support:all:read"
Field Value
Remarks
For the people who run support: staff of the product, who belong to none of the customers' teams and should not be put in them. Membership does not scale past a handful of tenants and puts staff in tenant membership lists; access simulation is a deliberate reduction of access and would record a member as having acted when a member did not.
This reads every conversation every customer has had, so it belongs to a support function rather than to an access level.
Manage
Reply to, close, reopen and assign a case that belongs to no team.
public const string Manage = "support:unassigned:manage"
Field Value
Remarks
Assignment is the operation that matters here: it decides which tenant a case and its whole transcript become part of, so it is granted with answering rather than with reading.
Read
Read support cases that belong to no team, and list them.
public const string Read = "support:unassigned:read"
Field Value
Remarks
The same privilege boundary as support:read and for the same reason — a case holds whatever
somebody typed into it — but across the cases no team owns.
UsageRead
Read how much the support assistant was used, per team, provider and model.
public const string UsageRead = "support:usage:read"
Field Value
Remarks
For whoever runs or bills the product. It reads no conversation, but it says how much every team used and, record by record, who asked, so it is a grant of its own rather than part of AllRead.