Add Tenants to Administration, and let an account be put in one
A tenant is a separate organisation on one server: its own people, domains and limits, and an administrator who manages only what is in it. It gets a section under Access, gated by sysTenantQuery and sysTenantGet, with a notice on a server that does not report Enterprise, where anyone inside a tenant is held to an ordinary user's permissions. The panel edits the tenant's name, logo, role and limits. The logo is an https address, drawn through the image proxy the strict image policy requires, or an image data URL. Limits change one quotas/<name> pointer each, so the four ihasmail does not offer keep their values, and an empty field is no limit. The role is the most anyone inside can be allowed. Stalwart keeps no list on a tenant -- each account, group, domain, list and role names its own -- so what a tenant holds is counted with memberTenantId queries and shown against its limits. Domains are added and taken out from the tenant's panel, one memberTenantId change each; only a domain in no tenant can be added, and its accounts stay where they are. Delete is offered once every count reads zero. A tenant does nothing until someone administers it, so the account panel gains a Tenant choice for an administrator who can read tenants: an Administrator inside a tenant administers that tenant. Nobody moves their own account. The mock has a tenant holding a domain and an administrator, a spare domain to assign, memberTenantId filters on every query, and Stalwart's rule that only an administrator outside every tenant may move things into one. A test of taking a domain back out found that the mock's pointer handling dropped a top-level null instead of storing it, so nothing had ever been cleared that way; it stores null now, as the server reads it back. Nothing about tenants has been written on a live server: production has none. KNOWN-ISSUES says what was read from source. Thirty-nine new strings and one plural, in all nine catalogues.
This commit is contained in:
@@ -249,6 +249,45 @@ export const catalog: Catalog = {
|
||||
"This role no longer exists. Someone may have deleted it.": "此角色已不存在。可能已被他人删除。",
|
||||
"the default roles": "默认角色设置",
|
||||
"The server did not say whether the role was created.": "服务器未说明角色是否已创建。",
|
||||
"No tenant": "无租户",
|
||||
"You can't move your own account into a tenant.": "您不能将自己的账户移入租户。",
|
||||
"An account in a tenant is limited by the tenant's role and counts towards its limits, and Administrator means administrator of that tenant.": "租户中的账户受租户角色限制,并计入租户的限额;管理员指该租户的管理员。",
|
||||
"Tenants": "租户",
|
||||
"Storage in GB": "存储 (GB)",
|
||||
"Default tenant roles": "默认租户角色",
|
||||
"A tenant needs a name.": "租户需要一个名称。",
|
||||
"New tenant": "新建租户",
|
||||
"{used} used": "已用 {used}",
|
||||
"Your role lets you view tenants but not change them.": "您的角色可以查看租户,但不能更改。",
|
||||
"Logo": "徽标",
|
||||
"An https address or a data URL of an image. Stalwart shows it to the tenant's people where it shows a logo.": "https 地址或图片的 data URL。Stalwart 会在显示徽标的地方向租户成员展示它。",
|
||||
"What it holds": "包含内容",
|
||||
"{n} of {limit}": "{n}/{limit}",
|
||||
"Limits": "限额",
|
||||
"Stalwart refuses to create more than a limit allows. An empty field is no limit.": "Stalwart 会拒绝超出限额的创建。留空表示不限。",
|
||||
"The most anyone in this tenant can be allowed: their own roles are cut down to what these grant. Only roles whose permissions you hold yourself are offered.": "此租户中任何人可被允许的上限:各自的角色会被缩减到这些角色授予的范围。只提供您自己拥有其权限的角色。",
|
||||
"Checking what is still in this tenant…": "正在检查此租户中还有什么…",
|
||||
"It still holds accounts, domains or other things. Move them out first.": "它仍包含账户、域名或其他内容。请先将其移出。",
|
||||
"Create tenant": "创建租户",
|
||||
"Added {domain} to {tenant}": "已将 {domain} 添加到 {tenant}",
|
||||
"Took {domain} out of {tenant}": "已将 {domain} 移出 {tenant}",
|
||||
"Take {domain} out of the tenant": "将 {domain} 移出租户",
|
||||
"No domains in this tenant yet": "此租户中还没有域名",
|
||||
"Domain to add": "要添加的域名",
|
||||
"Only domains in no tenant can be added. The accounts already on a domain stay where they are; move each from its own panel.": "只能添加不属于任何租户的域名。域名上已有的账户保持不变;请在各自的面板中移动。",
|
||||
"An empty tenant can be deleted.": "空租户可以删除。",
|
||||
"Delete tenant…": "删除租户…",
|
||||
"Still holds {things}. Move them out first.": "仍包含 {things}。请先将其移出。",
|
||||
"Delete tenant": "删除租户",
|
||||
"Separate organisations on one server, each with its own people, domains and limits.": "同一服务器上相互独立的组织,各有自己的成员、域名和限额。",
|
||||
"Tenants are a Stalwart Enterprise feature. This server does not report Enterprise, so anyone inside a tenant has only an ordinary user's permissions.": "租户是 Stalwart Enterprise 的功能。此服务器未报告为 Enterprise,因此租户中的任何人都只有普通用户的权限。",
|
||||
"Search tenants": "搜索租户",
|
||||
"No tenants match": "没有匹配的租户",
|
||||
"No tenants yet": "还没有租户",
|
||||
"Account limit": "账户限额",
|
||||
"The server allows no more tenants.": "服务器不允许再创建租户。",
|
||||
"This tenant no longer exists. Someone may have deleted it.": "此租户已不存在。可能已被他人删除。",
|
||||
"The server did not say whether the tenant was created.": "服务器未说明租户是否已创建。",
|
||||
"User": "用户",
|
||||
"Administrator": "管理员",
|
||||
"Custom role": "自定义角色",
|
||||
@@ -1656,6 +1695,7 @@ export const catalog: Catalog = {
|
||||
"{n} recipients": { other: "{n} 位收件人" },
|
||||
"Grants {n} permissions": { other: "授予 {n} 项权限" },
|
||||
"{n} roles": { other: "{n} 个角色" },
|
||||
"{n} tenants": { other: "{n} 个租户" },
|
||||
"{n} DKIM keys": { other: "{n} 个 DKIM 密钥" },
|
||||
"{n} other items": { other: "其他 {n} 项" },
|
||||
// ── Administration ────────────────────────────────────────────────
|
||||
|
||||
Reference in New Issue
Block a user