@things-factory/auth-ui 10.1.225 → 10.1.227
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist-client/components/role-template-picker.d.ts +5 -0
- package/dist-client/components/role-template-picker.js +151 -42
- package/dist-client/components/role-template-picker.js.map +1 -1
- package/dist-client/components/role-template-picker.test.d.ts +1 -0
- package/dist-client/components/role-template-picker.test.js +41 -0
- package/dist-client/components/role-template-picker.test.js.map +1 -0
- package/dist-client/identity-confirmation/identity-confirm-popup.d.ts +23 -0
- package/dist-client/identity-confirmation/identity-confirm-popup.js +121 -0
- package/dist-client/identity-confirmation/identity-confirm-popup.js.map +1 -0
- package/dist-client/identity-confirmation/identity-confirmation.d.ts +52 -0
- package/dist-client/identity-confirmation/identity-confirmation.js +148 -0
- package/dist-client/identity-confirmation/identity-confirmation.js.map +1 -0
- package/dist-client/index.d.ts +1 -0
- package/dist-client/index.js +2 -0
- package/dist-client/index.js.map +1 -1
- package/dist-client/pages/role/role-add-delete.test.d.ts +1 -0
- package/dist-client/pages/role/role-add-delete.test.js +61 -0
- package/dist-client/pages/role/role-add-delete.test.js.map +1 -0
- package/dist-client/pages/role/role-inheritance-shown.test.d.ts +1 -0
- package/dist-client/pages/role/role-inheritance-shown.test.js +31 -0
- package/dist-client/pages/role/role-inheritance-shown.test.js.map +1 -0
- package/dist-client/pages/role/role-list-page.d.ts +15 -11
- package/dist-client/pages/role/role-list-page.js +112 -53
- package/dist-client/pages/role/role-list-page.js.map +1 -1
- package/dist-client/pages/role/role-privilege-inherited.test.d.ts +1 -0
- package/dist-client/pages/role/role-privilege-inherited.test.js +23 -0
- package/dist-client/pages/role/role-privilege-inherited.test.js.map +1 -0
- package/dist-client/pages/role/role-privilege-page.d.ts +8 -5
- package/dist-client/pages/role/role-privilege-page.js +23 -13
- package/dist-client/pages/role/role-privilege-page.js.map +1 -1
- package/dist-client/pages/role/role-privilege-views.test.d.ts +1 -0
- package/dist-client/pages/role/role-privilege-views.test.js +19 -0
- package/dist-client/pages/role/role-privilege-views.test.js.map +1 -0
- package/dist-client/tsconfig.tsbuildinfo +1 -1
- package/helps/auth/application.ko.md +1 -1
- package/helps/auth/auth-provider.ko.md +1 -1
- package/helps/auth/domain-owners.ko.md +1 -1
- package/helps/operato-hub/partners.ko.md +1 -1
- package/helps/system/attribute.ko.md +1 -1
- package/package.json +6 -6
- package/translations/en.json +25 -10
- package/translations/es.json +25 -10
- package/translations/ja.json +25 -10
- package/translations/ko.json +26 -11
- package/translations/ms.json +25 -10
- package/translations/zh.json +25 -10
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import '@material/web/icon/icon.js';
|
|
2
|
+
import '../../components/auth-badge.js';
|
|
2
3
|
import '@operato/list-state/ox-page-state.js';
|
|
3
4
|
import '@operato/input/ox-input-search.js';
|
|
4
5
|
import type { CSSResultGroup } from 'lit';
|
|
@@ -29,7 +30,7 @@ declare const RolePrivilegePage_base: (new (...args: any[]) => import("lit").Lit
|
|
|
29
30
|
* (`auth-base/server/index.ts:34-36`). 그래서 지금 화면에 나오는 문장은 전부 2번이다.
|
|
30
31
|
*
|
|
31
32
|
* ── 저장 범위는 서버가 준 목록이다 ──────────────────────────────────────────
|
|
32
|
-
* 옛 편집기는 `querySelectorAll('input:checked')` 로 보냈다. 「더하기」
|
|
33
|
+
* 옛 편집기는 `querySelectorAll('input:checked')` 로 보냈다. 「더하기」 패널에서 다른 모듈로
|
|
33
34
|
* 옮기면 앞 모듈의 체크박스는 **DOM 에 없다** — 그 방식이면 모듈을 옮겨 다니는 것만으로
|
|
34
35
|
* 권한이 조용히 떨어진다. 여기서는 `rolePrivileges` 가 준 전체가 범위이고 켠 것은
|
|
35
36
|
* `assigned` 에만 있다. 화면이 무엇을 그렸는지와 무관하다.
|
|
@@ -63,6 +64,8 @@ export declare class RolePrivilegePage extends RolePrivilegePage_base {
|
|
|
63
64
|
* 말한다. (프로필의 `domain` 에 `id` 가 없어서 `subdomain` 으로 견준다.)
|
|
64
65
|
*/
|
|
65
66
|
private get inherited();
|
|
67
|
+
/** The domain the role stands in - named the same way by the badge beside the name and the note above it. */
|
|
68
|
+
private ownerDomainName;
|
|
66
69
|
private get savable();
|
|
67
70
|
private get visibleModules();
|
|
68
71
|
/**
|
|
@@ -113,7 +116,7 @@ export declare class RolePrivilegePage extends RolePrivilegePage_base {
|
|
|
113
116
|
* 자리를 옮긴다(`renderAdd`). 문장이 줄마다 있으므로 배우는 일이 따로 없다.
|
|
114
117
|
*
|
|
115
118
|
* ── 켜진 것만 낸다 ─────────────────────────────────────────────────────────
|
|
116
|
-
* 전체를 여기 또 그리면 같은 46 모듈이 화면에 두 번 선다. 전체는 「더하기」
|
|
119
|
+
* 전체를 여기 또 그리면 같은 46 모듈이 화면에 두 번 선다. 전체는 「더하기」 패널이 갖는다.
|
|
117
120
|
*
|
|
118
121
|
* ── 글이 없을 때 ───────────────────────────────────────────────────────────
|
|
119
122
|
* 「더하기」 판에서는 문장이 없으면 **없다고 말해도 된다** — 체크박스 옆에 「읽기」라는
|
|
@@ -183,7 +186,7 @@ export declare class RolePrivilegePage extends RolePrivilegePage_base {
|
|
|
183
186
|
*/
|
|
184
187
|
private renderAdd;
|
|
185
188
|
/**
|
|
186
|
-
* 고르는
|
|
189
|
+
* 고르는 패널을 **넓은 팝업**으로 연다.
|
|
187
190
|
*
|
|
188
191
|
* 사용자 말씀이다 — 「'할 수 있는 일 더하기' 작동을 팝업으로 넓게 할 수 있었으면 어떤가?
|
|
189
192
|
* 지금은 좁아보이고」. 페이지 안에 펼치면 본문(할 수 있는 일)이 아래로 밀리고, 남은 폭에서
|
|
@@ -202,9 +205,9 @@ export declare class RolePrivilegePage extends RolePrivilegePage_base {
|
|
|
202
205
|
*/
|
|
203
206
|
private openAdd;
|
|
204
207
|
/**
|
|
205
|
-
* 고르는
|
|
208
|
+
* 고르는 패널의 몸체 — **팝업이 이것을 그린다.**
|
|
206
209
|
*
|
|
207
|
-
*
|
|
210
|
+
* 패널을 부품 안으로 옮기지 않는다. 모듈 접기·축 줄·유령 규칙이 전부 이 페이지의 상태
|
|
208
211
|
* (`modules`·`assigned`·`selected`·`keyword`)를 보기 때문이고, 옮기면 **상태가 두 벌**이 된다.
|
|
209
212
|
* 두 벌이 되는 순간 어느 쪽이 저장 범위인지 흐려진다 — 옛 편집기가 `querySelectorAll` 로
|
|
210
213
|
* 범위를 만들던 결함이 정확히 그 모양이었다.
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { __decorate, __metadata } from "tslib";
|
|
2
2
|
import '@material/web/icon/icon.js';
|
|
3
|
+
import '../../components/auth-badge.js';
|
|
3
4
|
import '@operato/list-state/ox-page-state.js';
|
|
4
5
|
import '@operato/input/ox-input-search.js';
|
|
5
6
|
import gql from 'graphql-tag';
|
|
@@ -40,7 +41,7 @@ const GRANT_FIELDS = 'category axes';
|
|
|
40
41
|
* (`auth-base/server/index.ts:34-36`). 그래서 지금 화면에 나오는 문장은 전부 2번이다.
|
|
41
42
|
*
|
|
42
43
|
* ── 저장 범위는 서버가 준 목록이다 ──────────────────────────────────────────
|
|
43
|
-
* 옛 편집기는 `querySelectorAll('input:checked')` 로 보냈다. 「더하기」
|
|
44
|
+
* 옛 편집기는 `querySelectorAll('input:checked')` 로 보냈다. 「더하기」 패널에서 다른 모듈로
|
|
44
45
|
* 옮기면 앞 모듈의 체크박스는 **DOM 에 없다** — 그 방식이면 모듈을 옮겨 다니는 것만으로
|
|
45
46
|
* 권한이 조용히 떨어진다. 여기서는 `rolePrivileges` 가 준 전체가 범위이고 켠 것은
|
|
46
47
|
* `assigned` 에만 있다. 화면이 무엇을 그렸는지와 무관하다.
|
|
@@ -64,7 +65,8 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
64
65
|
this.loadError = null;
|
|
65
66
|
this.saving = false;
|
|
66
67
|
this.dirty = false;
|
|
67
|
-
|
|
68
|
+
/* 업무가 먼저다 — 사람이 읽는 말이 업무이고, 권한은 그 아래 낱낱이다(2026-10-28 사용자: 「'업무'를 먼저 보여주어라」). */
|
|
69
|
+
this.view = 'tasks';
|
|
68
70
|
/** The role laid against every task - computed by the server from the saved privileges (`Role.taskCoverage`). */
|
|
69
71
|
this.coverage = { tasks: [], unclassified: [] };
|
|
70
72
|
this.showUnheldTasks = false;
|
|
@@ -279,6 +281,9 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
279
281
|
}
|
|
280
282
|
|
|
281
283
|
[subject] [name] {
|
|
284
|
+
display: flex;
|
|
285
|
+
align-items: center;
|
|
286
|
+
gap: 8px;
|
|
282
287
|
font-size: 1.15rem;
|
|
283
288
|
font-weight: 640;
|
|
284
289
|
}
|
|
@@ -329,7 +334,7 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
329
334
|
흘렀다.** 내 ul[lines] 는 display 를 선언하지 않으므로 맞설 것이 없었다.
|
|
330
335
|
마크업을 갈 때는 그 마크업만 쓰던 CSS 를 함께 지운다.
|
|
331
336
|
|
|
332
|
-
높이도 바뀐다. max-height: 22vh 는 격자 두
|
|
337
|
+
높이도 바뀐다. max-height: 22vh 는 격자 두 패널이 늘 아래에 펼쳐져 있던 시절의 값이다.
|
|
333
338
|
지금은 **이 목록이 본문**이므로(§2) 남는 높이를 여기가 받고, 59줄은 여기서 흐른다.
|
|
334
339
|
*/
|
|
335
340
|
[granted] ul {
|
|
@@ -619,6 +624,10 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
619
624
|
const subdomain = this.subject?.domain?.subdomain;
|
|
620
625
|
return Boolean(subdomain && this.mySubdomain && subdomain !== this.mySubdomain);
|
|
621
626
|
}
|
|
627
|
+
/** The domain the role stands in - named the same way by the badge beside the name and the note above it. */
|
|
628
|
+
ownerDomainName() {
|
|
629
|
+
return this.subject?.domain?.name || this.subject?.domain?.subdomain || '';
|
|
630
|
+
}
|
|
622
631
|
get savable() {
|
|
623
632
|
return this.fetchState === 'loaded' && !this.saving && !this.inherited;
|
|
624
633
|
}
|
|
@@ -698,9 +707,7 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
698
707
|
return html `
|
|
699
708
|
${this.inherited
|
|
700
709
|
? html `<div note attention>
|
|
701
|
-
${i18next.t('text.role belongs to x domain and is edited there', {
|
|
702
|
-
x: this.subject?.domain?.name || this.subject?.domain?.subdomain
|
|
703
|
-
})}
|
|
710
|
+
${i18next.t('text.role belongs to x domain and is edited there', { x: this.ownerDomainName() })}
|
|
704
711
|
</div>`
|
|
705
712
|
: nothing}
|
|
706
713
|
${this.renderSubject()} ${this.renderHolders()} ${this.renderGranted()}
|
|
@@ -720,7 +727,10 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
720
727
|
}
|
|
721
728
|
return html `
|
|
722
729
|
<div subject>
|
|
723
|
-
<div name
|
|
730
|
+
<div name>
|
|
731
|
+
${this.subject?.name || i18next.t('label.role')}
|
|
732
|
+
${this.inherited ? html `<auth-badge>${i18next.t('label.inherited')} · ${this.ownerDomainName()}</auth-badge>` : nothing}
|
|
733
|
+
</div>
|
|
724
734
|
${this.subject?.description
|
|
725
735
|
? html `<div says>${this.subject.description}</div>`
|
|
726
736
|
: html `<div says missing>${i18next.t('text.no description for this role')}</div>`}
|
|
@@ -739,7 +749,7 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
739
749
|
* 자리를 옮긴다(`renderAdd`). 문장이 줄마다 있으므로 배우는 일이 따로 없다.
|
|
740
750
|
*
|
|
741
751
|
* ── 켜진 것만 낸다 ─────────────────────────────────────────────────────────
|
|
742
|
-
* 전체를 여기 또 그리면 같은 46 모듈이 화면에 두 번 선다. 전체는 「더하기」
|
|
752
|
+
* 전체를 여기 또 그리면 같은 46 모듈이 화면에 두 번 선다. 전체는 「더하기」 패널이 갖는다.
|
|
743
753
|
*
|
|
744
754
|
* ── 글이 없을 때 ───────────────────────────────────────────────────────────
|
|
745
755
|
* 「더하기」 판에서는 문장이 없으면 **없다고 말해도 된다** — 체크박스 옆에 「읽기」라는
|
|
@@ -762,7 +772,7 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
762
772
|
${i18next.t('field.granted privileges')}
|
|
763
773
|
<span count>${granted.length}</span>
|
|
764
774
|
<nav>
|
|
765
|
-
${this.viewButton('
|
|
775
|
+
${this.viewButton('tasks', i18next.t('label.tasks view'))} ${this.viewButton('privileges', i18next.t('label.privileges view'))}
|
|
766
776
|
${this.viewButton('template', i18next.t('label.template view'))}
|
|
767
777
|
</nav>
|
|
768
778
|
</header>
|
|
@@ -1132,7 +1142,7 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
1132
1142
|
`;
|
|
1133
1143
|
}
|
|
1134
1144
|
/**
|
|
1135
|
-
* 고르는
|
|
1145
|
+
* 고르는 패널을 **넓은 팝업**으로 연다.
|
|
1136
1146
|
*
|
|
1137
1147
|
* 사용자 말씀이다 — 「'할 수 있는 일 더하기' 작동을 팝업으로 넓게 할 수 있었으면 어떤가?
|
|
1138
1148
|
* 지금은 좁아보이고」. 페이지 안에 펼치면 본문(할 수 있는 일)이 아래로 밀리고, 남은 폭에서
|
|
@@ -1158,9 +1168,9 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
1158
1168
|
});
|
|
1159
1169
|
}
|
|
1160
1170
|
/**
|
|
1161
|
-
* 고르는
|
|
1171
|
+
* 고르는 패널의 몸체 — **팝업이 이것을 그린다.**
|
|
1162
1172
|
*
|
|
1163
|
-
*
|
|
1173
|
+
* 패널을 부품 안으로 옮기지 않는다. 모듈 접기·축 줄·유령 규칙이 전부 이 페이지의 상태
|
|
1164
1174
|
* (`modules`·`assigned`·`selected`·`keyword`)를 보기 때문이고, 옮기면 **상태가 두 벌**이 된다.
|
|
1165
1175
|
* 두 벌이 되는 순간 어느 쪽이 저장 범위인지 흐려진다 — 옛 편집기가 `querySelectorAll` 로
|
|
1166
1176
|
* 범위를 만들던 결함이 정확히 그 모양이었다.
|
|
@@ -1406,7 +1416,7 @@ let RolePrivilegePage = class RolePrivilegePage extends localize(i18next)(PageVi
|
|
|
1406
1416
|
this.modules = [...byCategory.values()].sort((a, b) => moduleLabel(a.category).localeCompare(moduleLabel(b.category)));
|
|
1407
1417
|
this.assigned = assigned;
|
|
1408
1418
|
this.dirty = false;
|
|
1409
|
-
/* 고른 것이 없으면 첫 모듈을 연다 — 빈 오른쪽
|
|
1419
|
+
/* 고른 것이 없으면 첫 모듈을 연다 — 빈 오른쪽 패널을 처음 화면으로 두지 않는다. */
|
|
1410
1420
|
if (!this.modules.find(m => m.category === this.selected)) {
|
|
1411
1421
|
this.selected = this.modules[0]?.category || '';
|
|
1412
1422
|
}
|