@live-change/access-control-frontend 0.9.38 → 0.9.40
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.
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
v-model="synchronizedPublicAccess.userRoles"
|
|
32
32
|
:feedback="false" toggleMask :disabled="disabled" />
|
|
33
33
|
</div>
|
|
34
|
-
<div class="p-field field mb-6" v-if="isMounted && requestedRolesVisible"
|
|
34
|
+
<div class="p-field field mb-6 col-span-12 md:col-span-6" v-if="isMounted && requestedRolesVisible"
|
|
35
35
|
:class="autoGrantRequestsVisible ? 'col-6' : 'col-12'">
|
|
36
36
|
<label for="availablePublicAccess" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">Roles available to request:</label>
|
|
37
37
|
<MultiSelect id="userPublicAccess" class="w-full" inputClass="w-full"
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
v-model="synchronizedPublicAccess.availableRoles"
|
|
41
41
|
:feedback="false" toggleMask :disabled="disabled" />
|
|
42
42
|
</div>
|
|
43
|
-
<div class="p-field field mb-6 col-span-6" v-if="isMounted && autoGrantRequestsVisible">
|
|
43
|
+
<div class="p-field field mb-6 col-span-12 md:col-span-6" v-if="isMounted && autoGrantRequestsVisible">
|
|
44
44
|
<label for="autoGrantRequests" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
45
45
|
Automatically grant number of requests:
|
|
46
46
|
</label>
|
|
@@ -11,31 +11,88 @@
|
|
|
11
11
|
|
|
12
12
|
<template #default>
|
|
13
13
|
|
|
14
|
-
<
|
|
15
|
-
<
|
|
16
|
-
|
|
17
|
-
<
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
14
|
+
<Tabs v-model:value="tabIndex" class="w-full">
|
|
15
|
+
<TabList>
|
|
16
|
+
<Tab value="0">Single user</Tab>
|
|
17
|
+
<Tab value="1">Multiple users</Tab>
|
|
18
|
+
</TabList>
|
|
19
|
+
<TabPanels>
|
|
20
|
+
<TabPanel value="0">
|
|
21
|
+
|
|
22
|
+
<command-form service="accessControl" action="inviteEmail"
|
|
23
|
+
ref="inviteForm"
|
|
24
|
+
v-slot="{ data }"
|
|
25
|
+
:parameters="{ objectType, object }"
|
|
26
|
+
:initialValues="{ roles: availableRoles }"
|
|
27
|
+
@done="handleInvited" keepOnDone>
|
|
28
|
+
|
|
29
|
+
<div class="grid grid-cols-12 gap-4 formgrid p-fluid mb-2 pt-2">
|
|
30
|
+
<div class="col-span-12 md:col-span-6 mb-2">
|
|
31
|
+
<div class="p-field">
|
|
32
|
+
<label for="email" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
33
|
+
Email address
|
|
34
|
+
</label>
|
|
35
|
+
<InputText id="email" type="text" class="w-full"
|
|
36
|
+
aria-describedby="email-help" :invalid="!!data.emailError"
|
|
37
|
+
v-model="data.email" />
|
|
38
|
+
<Message v-if="data.emailError" severity="error" variant="simple" size="small">
|
|
39
|
+
{{ t(`errors.${data.emailError}`) }}
|
|
40
|
+
</Message>
|
|
41
|
+
</div>
|
|
42
|
+
</div>
|
|
43
|
+
<div class="col-span-12 md:col-span-6 mb-2">
|
|
44
|
+
<div class="p-field ">
|
|
45
|
+
<label for="inviteAccess" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
46
|
+
Roles
|
|
47
|
+
</label>
|
|
48
|
+
<Dropdown v-if="!multiRole" id="inviteAccess" class="w-14em w-full"
|
|
49
|
+
:options="['none'].concat(availableRoles)"
|
|
50
|
+
:optionLabel="optionLabel"
|
|
51
|
+
:modelValue="data.roles?.[0] ?? 'none'"
|
|
52
|
+
@update:modelValue="newValue => data.roles = [newValue]"
|
|
53
|
+
:feedback="false" toggleMask />
|
|
54
|
+
<MultiSelect v-if="multiRole" id="inviteAccess" class="w-full"
|
|
55
|
+
:options="availableRoles"
|
|
56
|
+
:optionLabel="optionLabel"
|
|
57
|
+
v-model="data.roles"
|
|
58
|
+
:feedback="false" toggleMask />
|
|
59
|
+
<Message v-if="data.rolesError" severity="error" variant="simple" size="small">
|
|
60
|
+
{{ t(`errors.${data.rolesError}`) }}
|
|
61
|
+
</Message>
|
|
62
|
+
</div>
|
|
63
|
+
</div>
|
|
64
|
+
</div>
|
|
65
|
+
<div class="p-field">
|
|
66
|
+
<label for="inviteMessage" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
67
|
+
Message ( optional )
|
|
68
|
+
</label>
|
|
69
|
+
<Textarea id="inviteMessage" v-model="data.message" :autoResize="true" rows="3" class="w-full" />
|
|
70
|
+
</div>
|
|
71
|
+
|
|
72
|
+
</command-form>
|
|
73
|
+
|
|
74
|
+
</TabPanel>
|
|
75
|
+
<TabPanel value="1">
|
|
76
|
+
|
|
77
|
+
<command-form service="accessControl" action="inviteManyEmailsFromText"
|
|
78
|
+
ref="inviteManyForm"
|
|
79
|
+
v-slot="{ data }"
|
|
80
|
+
:parameters="{ objectType, object }"
|
|
81
|
+
:initialValues="{ roles: availableRoles }"
|
|
82
|
+
@done="handleInvitedMany" keepOnDone>
|
|
83
|
+
|
|
26
84
|
<div class="p-field mb-4">
|
|
27
85
|
<label for="email" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
28
|
-
Email
|
|
86
|
+
Email addresses (newline or comma separated)
|
|
29
87
|
</label>
|
|
30
|
-
<
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
88
|
+
<Textarea id="emailsText" type="text" class="w-full"
|
|
89
|
+
rows="4"
|
|
90
|
+
aria-describedby="emails-help" :invalid="!!data.emailsTextError"
|
|
91
|
+
v-model="data.emailsText" />
|
|
92
|
+
<Message v-if="data.emailsTextError" severity="error" variant="simple" size="small">
|
|
93
|
+
{{ t(`errors.${data.emailsTextError}`) }}
|
|
35
94
|
</Message>
|
|
36
95
|
</div>
|
|
37
|
-
</div>
|
|
38
|
-
<div class="col-span-12 md:col-span-6">
|
|
39
96
|
<div class="p-field mb-4">
|
|
40
97
|
<label for="inviteAccess" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
41
98
|
Roles
|
|
@@ -47,77 +104,26 @@
|
|
|
47
104
|
@update:modelValue="newValue => data.roles = [newValue]"
|
|
48
105
|
:feedback="false" toggleMask />
|
|
49
106
|
<MultiSelect v-if="multiRole" id="inviteAccess" class="w-full"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
107
|
+
:options="availableRoles"
|
|
108
|
+
:optionLabel="optionLabel"
|
|
109
|
+
v-model="data.roles"
|
|
110
|
+
:feedback="false" toggleMask />
|
|
54
111
|
<Message v-if="data.rolesError" severity="error" variant="simple" size="small">
|
|
55
112
|
{{ t(`errors.${data.rolesError}`) }}
|
|
56
113
|
</Message>
|
|
57
114
|
</div>
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
<label for="inviteMessage" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
62
|
-
Message ( optional )
|
|
63
|
-
</label>
|
|
64
|
-
<Textarea id="inviteMessage" v-model="data.message" :autoResize="true" rows="3" class="w-full" />
|
|
65
|
-
</div>
|
|
66
|
-
|
|
67
|
-
</command-form>
|
|
68
|
-
|
|
69
|
-
</TabPanel>
|
|
70
|
-
<TabPanel header="Multiple users">
|
|
71
|
-
|
|
72
|
-
<command-form service="accessControl" action="inviteManyEmailsFromText"
|
|
73
|
-
ref="inviteManyForm"
|
|
74
|
-
v-slot="{ data }"
|
|
75
|
-
:parameters="{ objectType, object }"
|
|
76
|
-
:initialValues="{ roles: availableRoles }"
|
|
77
|
-
@done="handleInvitedMany" keepOnDone>
|
|
78
|
-
|
|
79
|
-
<div class="p-field mb-4">
|
|
80
|
-
<label for="email" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
81
|
-
Email addresses (newline or comma separated)
|
|
82
|
-
</label>
|
|
83
|
-
<Textarea id="emailsText" type="text" class="w-full"
|
|
84
|
-
rows="4"
|
|
85
|
-
aria-describedby="emails-help" :invalid="!!data.emailsTextError"
|
|
86
|
-
v-model="data.emailsText" />
|
|
87
|
-
<Message v-if="data.emailsTextError" severity="error" variant="simple" size="small">
|
|
88
|
-
{{ t(`errors.${data.emailsTextError}`) }}
|
|
89
|
-
</Message>
|
|
90
|
-
</div>
|
|
91
|
-
<div class="p-field mb-4">
|
|
92
|
-
<label for="inviteAccess" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
93
|
-
Roles
|
|
115
|
+
<div class="p-field mb-1">
|
|
116
|
+
<label for="inviteMessage" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
117
|
+
Message ( optional )
|
|
94
118
|
</label>
|
|
95
|
-
<
|
|
96
|
-
:options="['none'].concat(availableRoles)"
|
|
97
|
-
:optionLabel="optionLabel"
|
|
98
|
-
:modelValue="data.roles?.[0] ?? 'none'"
|
|
99
|
-
@update:modelValue="newValue => data.roles = [newValue]"
|
|
100
|
-
:feedback="false" toggleMask />
|
|
101
|
-
<MultiSelect v-if="multiRole" id="inviteAccess" class="w-full"
|
|
102
|
-
:options="availableRoles"
|
|
103
|
-
:optionLabel="optionLabel"
|
|
104
|
-
v-model="data.roles"
|
|
105
|
-
:feedback="false" toggleMask />
|
|
106
|
-
<Message v-if="data.rolesError" severity="error" variant="simple" size="small">
|
|
107
|
-
{{ t(`errors.${data.rolesError}`) }}
|
|
108
|
-
</Message>
|
|
119
|
+
<Textarea id="inviteMessage" v-model="data.message" :autoResize="true" rows="3" class="w-full" />
|
|
109
120
|
</div>
|
|
110
|
-
<div class="p-field mb-1">
|
|
111
|
-
<label for="inviteMessage" class="block text-surface-900 dark:text-surface-0 font-medium mb-2">
|
|
112
|
-
Message ( optional )
|
|
113
|
-
</label>
|
|
114
|
-
<Textarea id="inviteMessage" v-model="data.message" :autoResize="true" rows="3" class="w-full" />
|
|
115
|
-
</div>
|
|
116
121
|
|
|
117
|
-
|
|
122
|
+
</command-form>
|
|
118
123
|
|
|
119
|
-
|
|
120
|
-
|
|
124
|
+
</TabPanel>
|
|
125
|
+
</TabPanels>
|
|
126
|
+
</Tabs>
|
|
121
127
|
|
|
122
128
|
</template>
|
|
123
129
|
|
|
@@ -152,8 +158,11 @@
|
|
|
152
158
|
|
|
153
159
|
import ProgressSpinner from 'primevue/progressspinner'
|
|
154
160
|
|
|
155
|
-
import
|
|
156
|
-
import
|
|
161
|
+
import Tabs from 'primevue/tabs';
|
|
162
|
+
import TabList from 'primevue/tablist';
|
|
163
|
+
import Tab from 'primevue/tab';
|
|
164
|
+
import TabPanels from 'primevue/tabpanels';
|
|
165
|
+
import TabPanel from 'primevue/tabpanel';
|
|
157
166
|
|
|
158
167
|
import Button from "primevue/button"
|
|
159
168
|
import Dropdown from "primevue/dropdown"
|
|
@@ -193,7 +202,7 @@
|
|
|
193
202
|
|
|
194
203
|
const { availableRoles, multiRole, object, objectType } = toRefs(props)
|
|
195
204
|
|
|
196
|
-
const tabIndex = ref(0)
|
|
205
|
+
const tabIndex = ref('0')
|
|
197
206
|
|
|
198
207
|
const visible = defineModel('visible', { required: true })
|
|
199
208
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@live-change/access-control-frontend",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.40",
|
|
4
4
|
"scripts": {
|
|
5
5
|
"memDev": "node server/start.js memDev --enableSessions --initScript ./init.js --dbAccess",
|
|
6
6
|
"localDevInit": "rm tmp.db; lcli localDev --enableSessions --initScript ./init.js",
|
|
@@ -21,22 +21,22 @@
|
|
|
21
21
|
},
|
|
22
22
|
"type": "module",
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@live-change/access-control-service": "^0.9.
|
|
25
|
-
"@live-change/cli": "^0.9.
|
|
26
|
-
"@live-change/dao": "^0.9.
|
|
27
|
-
"@live-change/dao-vue3": "^0.9.
|
|
28
|
-
"@live-change/dao-websocket": "^0.9.
|
|
29
|
-
"@live-change/db-admin": "^0.9.
|
|
30
|
-
"@live-change/framework": "^0.9.
|
|
31
|
-
"@live-change/frontend-base": "^0.9.
|
|
32
|
-
"@live-change/password-authentication-service": "^0.9.
|
|
33
|
-
"@live-change/secret-code-service": "^0.9.
|
|
34
|
-
"@live-change/secret-link-service": "^0.9.
|
|
35
|
-
"@live-change/session-service": "^0.9.
|
|
36
|
-
"@live-change/user-frontend": "^0.9.
|
|
37
|
-
"@live-change/user-service": "^0.9.
|
|
38
|
-
"@live-change/vue3-components": "^0.9.
|
|
39
|
-
"@live-change/vue3-ssr": "^0.9.
|
|
24
|
+
"@live-change/access-control-service": "^0.9.40",
|
|
25
|
+
"@live-change/cli": "^0.9.40",
|
|
26
|
+
"@live-change/dao": "^0.9.40",
|
|
27
|
+
"@live-change/dao-vue3": "^0.9.40",
|
|
28
|
+
"@live-change/dao-websocket": "^0.9.40",
|
|
29
|
+
"@live-change/db-admin": "^0.9.40",
|
|
30
|
+
"@live-change/framework": "^0.9.40",
|
|
31
|
+
"@live-change/frontend-base": "^0.9.40",
|
|
32
|
+
"@live-change/password-authentication-service": "^0.9.40",
|
|
33
|
+
"@live-change/secret-code-service": "^0.9.40",
|
|
34
|
+
"@live-change/secret-link-service": "^0.9.40",
|
|
35
|
+
"@live-change/session-service": "^0.9.40",
|
|
36
|
+
"@live-change/user-frontend": "^0.9.40",
|
|
37
|
+
"@live-change/user-service": "^0.9.40",
|
|
38
|
+
"@live-change/vue3-components": "^0.9.40",
|
|
39
|
+
"@live-change/vue3-ssr": "^0.9.40",
|
|
40
40
|
"@vueuse/core": "^12.3.0",
|
|
41
41
|
"codeceptjs-assert": "^0.0.5",
|
|
42
42
|
"compression": "^1.7.5",
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
"vue3-scroll-border": "0.1.6"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
|
-
"@live-change/codeceptjs-helper": "^0.9.
|
|
56
|
+
"@live-change/codeceptjs-helper": "^0.9.40",
|
|
57
57
|
"codeceptjs": "^3.6.10",
|
|
58
58
|
"generate-password": "1.7.1",
|
|
59
59
|
"playwright": "1.49.1",
|
|
@@ -64,5 +64,5 @@
|
|
|
64
64
|
"author": "Michał Łaszczewski <michal@laszczewski.pl>",
|
|
65
65
|
"license": "BSD-3-Clause",
|
|
66
66
|
"description": "",
|
|
67
|
-
"gitHead": "
|
|
67
|
+
"gitHead": "d25366854a7a30557fd8f8e428a2e02cabb5b323"
|
|
68
68
|
}
|