web/admin: fix admins not able to delete MFA devices (#7660)
Signed-off-by: Jens Langhammer <jens@goauthentik.io> # Conflicts: # web/xliff/zh-Hans.xlf
This commit is contained in:
		| @ -15,6 +15,8 @@ export class UserDeviceTable extends Table<Device> { | ||||
|     @property({ type: Number }) | ||||
|     userId?: number; | ||||
|  | ||||
|     checkbox = true; | ||||
|  | ||||
|     async apiEndpoint(): Promise<PaginatedResponse<Device>> { | ||||
|         return new AuthenticatorsApi(DEFAULT_CONFIG) | ||||
|             .authenticatorsAdminAllList({ | ||||
| @ -64,6 +66,21 @@ export class UserDeviceTable extends Table<Device> { | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     renderToolbarSelected(): TemplateResult { | ||||
|         const disabled = this.selectedElements.length < 1; | ||||
|         return html`<ak-forms-delete-bulk | ||||
|             objectLabel=${msg("Device(s)")} | ||||
|             .objects=${this.selectedElements} | ||||
|             .delete=${(item: Device) => { | ||||
|                 return this.deleteWrapper(item); | ||||
|             }} | ||||
|         > | ||||
|             <button ?disabled=${disabled} slot="trigger" class="pf-c-button pf-m-danger"> | ||||
|                 ${msg("Delete")} | ||||
|             </button> | ||||
|         </ak-forms-delete-bulk>`; | ||||
|     } | ||||
|  | ||||
|     renderToolbar(): TemplateResult { | ||||
|         return html` <ak-spinner-button | ||||
|             .callAction=${() => { | ||||
|  | ||||
| @ -1,4 +1,4 @@ | ||||
| <?xml version="1.0" ?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> | ||||
| <?xml version="1.0"?><xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2"> | ||||
|   <file target-language="zh-Hans" source-language="en" original="lit-localize-inputs" datatype="plaintext"> | ||||
|     <body> | ||||
|       <trans-unit id="s4caed5b7a7e5d89b"> | ||||
| @ -613,9 +613,9 @@ | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="saa0e2675da69651b"> | ||||
|         <source>The URL "<x id="0" equiv-text="${this.url}"/>" was not found.</source> | ||||
|         <target>未找到 URL "  | ||||
|         <x id="0" equiv-text="${this.url}"/>"。</target> | ||||
|         <source>The URL "<x id="0" equiv-text="${this.url}"/>" was not found.</source> | ||||
|         <target>未找到 URL "  | ||||
|         <x id="0" equiv-text="${this.url}"/>"。</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s58cd9c2fe836d9c6"> | ||||
| @ -1057,8 +1057,8 @@ | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="sa8384c9c26731f83"> | ||||
|         <source>To allow any redirect URI, set this value to ".*". Be aware of the possible security implications this can have.</source> | ||||
|         <target>要允许任何重定向 URI,请将此值设置为 ".*"。请注意这可能带来的安全影响。</target> | ||||
|         <source>To allow any redirect URI, set this value to ".*". Be aware of the possible security implications this can have.</source> | ||||
|         <target>要允许任何重定向 URI,请将此值设置为 ".*"。请注意这可能带来的安全影响。</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s55787f4dfcdce52b"> | ||||
| @ -1799,8 +1799,8 @@ | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="sa90b7809586c35ce"> | ||||
|         <source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon "fa-test".</source> | ||||
|         <target>输入完整 URL、相对路径,或者使用 'fa://fa-test' 来使用 Font Awesome 图标 "fa-test"。</target> | ||||
|         <source>Either input a full URL, a relative path, or use 'fa://fa-test' to use the Font Awesome icon "fa-test".</source> | ||||
|         <target>输入完整 URL、相对路径,或者使用 'fa://fa-test' 来使用 Font Awesome 图标 "fa-test"。</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s0410779cb47de312"> | ||||
| @ -2562,31 +2562,6 @@ | ||||
|         <source>If the password's score is less than or equal this value, the policy will fail.</source> | ||||
|         <target>如果密码分数小于等于此值,则策略失败。</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s1bfe7505059d164f"> | ||||
|         <source>0: Too guessable: risky password. (guesses < 10^3)</source> | ||||
|         <target>0:过于易猜测:密码有风险。(猜测次数 < 10^3)</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s423d1f2477998d0b"> | ||||
|         <source>1: Very guessable: protection from throttled online attacks. (guesses < 10^6)</source> | ||||
|         <target>1:非常易猜测:可以防范受限的在线攻击。(猜测次数 < 10^6)</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s33849cc046eb901d"> | ||||
|         <source>2: Somewhat guessable: protection from unthrottled online attacks. (guesses < 10^8)</source> | ||||
|         <target>2:有些易猜测:可以防范不受限的在线攻击。(猜测次数 < 10^8)</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s578dcce295718e1b"> | ||||
|         <source>3: Safely unguessable: moderate protection from offline slow-hash scenario. (guesses < 10^10)</source> | ||||
|         <target>3:难以猜测:适度防范离线慢速哈希场景。(猜测次数 < 10^10)</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s7a46de49f4eba5d7"> | ||||
|         <source>4: Very unguessable: strong protection from offline slow-hash scenario. (guesses >= 10^10)</source> | ||||
|         <target>4:非常难以猜测:高度防范离线慢速哈希场景。(猜测次数 >= 10^10)</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="sd6cd7ce2310a73a4"> | ||||
|         <source>Checks the value from the policy request against several rules, mostly used to ensure password strength.</source> | ||||
| @ -3013,8 +2988,8 @@ doesn't pass when either or both of the selected options are equal or above the | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s76768bebabb7d543"> | ||||
|         <source>Field which contains members of a group. Note that if using the "memberUid" field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source> | ||||
|         <target>包含组成员的字段。请注意,如果使用 "memberUid" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'</target> | ||||
|         <source>Field which contains members of a group. Note that if using the "memberUid" field, the value is assumed to contain a relative distinguished name. e.g. 'memberUid=some-user' instead of 'memberUid=cn=some-user,ou=groups,...'</source> | ||||
|         <target>包含组成员的字段。请注意,如果使用 "memberUid" 字段,则假定该值包含相对可分辨名称。例如,'memberUid=some-user' 而不是 'memberUid=cn=some-user,ou=groups,...'</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s026555347e589f0e"> | ||||
| @ -3806,8 +3781,8 @@ doesn't pass when either or both of the selected options are equal or above the | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s7b1fba26d245cb1c"> | ||||
|         <source>When using an external logging solution for archiving, this can be set to "minutes=5".</source> | ||||
|         <target>使用外部日志记录解决方案进行存档时,可以将其设置为 "minutes=5"。</target> | ||||
|         <source>When using an external logging solution for archiving, this can be set to "minutes=5".</source> | ||||
|         <target>使用外部日志记录解决方案进行存档时,可以将其设置为 "minutes=5"。</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s44536d20bb5c8257"> | ||||
| @ -3816,8 +3791,8 @@ doesn't pass when either or both of the selected options are equal or above the | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s3bb51cabb02b997e"> | ||||
|         <source>Format: "weeks=3;days=2;hours=3,seconds=2".</source> | ||||
|         <target>格式:"weeks=3;days=2;hours=3,seconds=2"。</target> | ||||
|         <source>Format: "weeks=3;days=2;hours=3,seconds=2".</source> | ||||
|         <target>格式:"weeks=3;days=2;hours=3,seconds=2"。</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s04bfd02201db5ab8"> | ||||
| @ -4013,10 +3988,10 @@ doesn't pass when either or both of the selected options are equal or above the | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="sa95a538bfbb86111"> | ||||
|         <source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> "<x id="1" equiv-text="${this.obj?.name}"/>"?</source> | ||||
|         <source>Are you sure you want to update <x id="0" equiv-text="${this.objectLabel}"/> "<x id="1" equiv-text="${this.obj?.name}"/>"?</source> | ||||
|         <target>您确定要更新  | ||||
|         <x id="0" equiv-text="${this.objectLabel}"/>"  | ||||
|         <x id="1" equiv-text="${this.obj?.name}"/>" 吗?</target> | ||||
|         <x id="0" equiv-text="${this.objectLabel}"/>"  | ||||
|         <x id="1" equiv-text="${this.obj?.name}"/>" 吗?</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="sc92d7cfb6ee1fec6"> | ||||
| @ -5102,7 +5077,7 @@ doesn't pass when either or both of the selected options are equal or above the | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="sdf1d8edef27236f0"> | ||||
|         <source>A "roaming" authenticator, like a YubiKey</source> | ||||
|         <source>A "roaming" authenticator, like a YubiKey</source> | ||||
|         <target>像 YubiKey 这样的“漫游”身份验证器</target> | ||||
|          | ||||
|       </trans-unit> | ||||
| @ -5437,10 +5412,10 @@ doesn't pass when either or both of the selected options are equal or above the | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s2d5f69929bb7221d"> | ||||
|         <source><x id="0" equiv-text="${prompt.name}"/> ("<x id="1" equiv-text="${prompt.fieldKey}"/>", of type <x id="2" equiv-text="${prompt.type}"/>)</source> | ||||
|         <source><x id="0" equiv-text="${prompt.name}"/> ("<x id="1" equiv-text="${prompt.fieldKey}"/>", of type <x id="2" equiv-text="${prompt.type}"/>)</source> | ||||
|         <target> | ||||
|         <x id="0" equiv-text="${prompt.name}"/>("  | ||||
|         <x id="1" equiv-text="${prompt.fieldKey}"/>",类型为  | ||||
|         <x id="0" equiv-text="${prompt.name}"/>("  | ||||
|         <x id="1" equiv-text="${prompt.fieldKey}"/>",类型为  | ||||
|         <x id="2" equiv-text="${prompt.type}"/>)</target> | ||||
|          | ||||
|       </trans-unit> | ||||
| @ -5489,7 +5464,7 @@ doesn't pass when either or both of the selected options are equal or above the | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s1608b2f94fa0dbd4"> | ||||
|         <source>If set to a duration above 0, the user will have the option to choose to "stay signed in", which will extend their session by the time specified here.</source> | ||||
|         <source>If set to a duration above 0, the user will have the option to choose to "stay signed in", which will extend their session by the time specified here.</source> | ||||
|         <target>如果设置时长大于 0,用户可以选择“保持登录”选项,这将使用户的会话延长此处设置的时间。</target> | ||||
|          | ||||
|       </trans-unit> | ||||
| @ -6585,9 +6560,9 @@ Bindings to groups/users are checked against the user of the event.</source> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s96b3cddf33e1c853"> | ||||
|         <source>You're currently impersonating <x id="0" equiv-text="${this.user.user.username}"/>. Click to stop.</source> | ||||
|         <source>You're currently impersonating <x id="0" equiv-text="${this.impersonation}"/>. Click to stop.</source> | ||||
|         <target>您目前正在模拟  | ||||
|         <x id="0" equiv-text="${this.user.user.username}"/>的身份。点击以停止。</target> | ||||
|         <x id="0" equiv-text="${this.impersonation}"/>的身份。点击以停止。</target> | ||||
|          | ||||
|       </trans-unit> | ||||
|       <trans-unit id="s7031e6928c44cedd"> | ||||
| @ -7941,6 +7916,78 @@ Bindings to groups/users are checked against the user of the event.</source> | ||||
| <trans-unit id="s32babfed740fd3c1"> | ||||
|   <source>User type used for newly created users.</source> | ||||
|   <target>新创建用户使用的用户类型。</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="s4a34a6be4c68ec87"> | ||||
|   <source>Users created</source> | ||||
|   <target>已创建用户</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="s275c956687e2e656"> | ||||
|   <source>Failed logins</source> | ||||
|   <target>失败登录</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="sb35c08e3a541188f"> | ||||
|   <source>Also known as Client ID.</source> | ||||
|   <target>也称为客户端 ID。</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="sd46fd9b647cfea10"> | ||||
|   <source>Also known as Client Secret.</source> | ||||
|   <target>也称为客户端密钥。</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="s4476e9c50cfd13f4"> | ||||
|   <source>Global status</source> | ||||
|   <target>全局状态</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="sd21a971eea208533"> | ||||
|   <source>Vendor</source> | ||||
|   <target>供应商</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="sadadfe9dfa06d7dd"> | ||||
|   <source>No sync status.</source> | ||||
|   <target>无同步状态。</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="s2b1c81130a65a55b"> | ||||
|   <source>Sync currently running.</source> | ||||
|   <target>当前正在同步。</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="sf36170f71cea38c2"> | ||||
|   <source>Connectivity</source> | ||||
|   <target>连接性</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="sd94e99af8b41ff54"> | ||||
|   <source>0: Too guessable: risky password. (guesses &lt; 10^3)</source> | ||||
|   <target>0:过于易猜测:密码有风险。(猜测次数 &lt; 10^3)</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="sc926385d1a624c3a"> | ||||
|   <source>1: Very guessable: protection from throttled online attacks. (guesses &lt; 10^6)</source> | ||||
|   <target>1:非常易猜测:可以防范受限的在线攻击。(猜测次数 &lt; 10^6)</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="s8aae61c41319602c"> | ||||
|   <source>2: Somewhat guessable: protection from unthrottled online attacks. (guesses &lt; 10^8)</source> | ||||
|   <target>2:有些易猜测:可以防范不受限的在线攻击。(猜测次数 &lt; 10^8)</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="sc1f4b57e722a89d6"> | ||||
|   <source>3: Safely unguessable: moderate protection from offline slow-hash scenario. (guesses &lt; 10^10)</source> | ||||
|   <target>3:难以猜测:适度防范离线慢速哈希场景。(猜测次数 &lt; 10^10)</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="sd47f3d3c9741343d"> | ||||
|   <source>4: Very unguessable: strong protection from offline slow-hash scenario. (guesses &gt;= 10^10)</source> | ||||
|   <target>4:非常难以猜测:高度防范离线慢速哈希场景。(猜测次数 &gt;= 10^10)</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="s3d2a8b86a4f5a810"> | ||||
|   <source>Successfully created user and added to group <x id="0" equiv-text="${this.group.name}"/></source> | ||||
|   <target>成功创建用户并添加到组 <x id="0" equiv-text="${this.group.name}"/></target> | ||||
| </trans-unit> | ||||
| <trans-unit id="s824e0943a7104668"> | ||||
|   <source>This user will be added to the group "<x id="0" equiv-text="${this.targetGroup.name}"/>".</source> | ||||
|   <target>此用户将会被添加到组 &quot;<x id="0" equiv-text="${this.targetGroup.name}"/>&quot;。</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="s62e7f6ed7d9cb3ca"> | ||||
|   <source>Pretend user exists</source> | ||||
|   <target>假作用户存在</target> | ||||
| </trans-unit> | ||||
| <trans-unit id="s52bdc80690a9a8dc"> | ||||
|   <source>When enabled, the stage will always accept the given user identifier and continue.</source> | ||||
|   <target>启用时,此阶段总是会接受指定的用户 ID 并继续。</target> | ||||
| </trans-unit> | ||||
|     </body> | ||||
|   </file> | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Jens L
					Jens L