Table of Contents

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

string

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

string

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

string

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

string

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

string

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.