Skip to content

Commit 3291a62

Browse files
authored
Allow locking and unlocking users via UI (#8337)
1 parent 9b18243 commit 3291a62

File tree

4 files changed

+42
-16
lines changed

4 files changed

+42
-16
lines changed

ui/public/locales/en.json

+3
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@
142142
"label.action.iso.permission": "Update ISO permissions",
143143
"label.action.iso.share": "Update ISO sharing",
144144
"label.action.lock.account": "Lock Account",
145+
"label.action.lock.user": "Lock User",
145146
"label.action.manage.cluster": "Manage cluster",
146147
"label.action.migrate.router": "Migrate router",
147148
"label.action.migrate.systemvm": "Migrate System VM",
@@ -2966,6 +2967,8 @@
29662967
"message.loading.delete.tungsten.router.table": "Removing Router Table...",
29672968
"message.loading.delete.tungsten.tag": "Removing Tag...",
29682969
"message.lock.account": "Please confirm that you want to lock this Account. By locking the Account, all Users for this Account will no longer be able to manage their cloud resources. Existing resources can still be accessed.",
2970+
"message.lock.user": "Please confirm that you want to lock the User \"{user}\". By locking this User, they will no longer be able to manage their cloud resources. Existing resources can still be accessed.",
2971+
"message.lock.user.success": "Successfully locked User \"{user}\"",
29692972
"message.login.failed": "Login Failed",
29702973
"message.migrate.instance.host.auto.assign": "Host for the Instance will be automatically chosen based on the suitability within the same cluster",
29712974
"message.migrate.instance.to.host": "Please confirm that you want to migrate this Instance to another host. When migration is between hosts of different clusters volume(s) of the Instance may get migrated to suitable storage pools.",

ui/public/locales/pt_BR.json

+3
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@
120120
"label.action.iso.permission": "Atualizar permiss\u00f5es da ISO",
121121
"label.action.iso.share": "Atualizar compartilhamento da ISO",
122122
"label.action.lock.account": "Bloquear conta",
123+
"label.action.lock.user": "Bloquear usu\u00e1rio",
123124
"label.action.manage.cluster": "Vincular cluster",
124125
"label.action.migrate.router": "Migrar roteador",
125126
"label.action.migrate.systemvm": "Migrar VM de sistema",
@@ -2224,6 +2225,8 @@
22242225
"message.listnsp.not.return.providerid": "erro: A API listNetworkServiceProviders n\u00e3o retorna o ID do provedor virtualRouter",
22252226
"message.load.host.failed": "Falha ao carregar os hosts",
22262227
"message.lock.account": "Confirme se voc\u00ea deseja bloquear esta conta. Bloqueando a conta, todos os usu\u00e1rios desta conta n\u00e3o estar\u00e3o mais habilitados a gerenciar os recursos na nuvem. Os recursos existentes (cloud server) ainda poder\u00e3o ser acessados.",
2228+
"message.lock.user": "Confirme se voc\u00ea deseja bloquear o usu\u00e1rio \"{user}\". Bloqueando este usu\u00e1rio, o mesmo n\u00e3o estar\u00e1 mais habilitado a gerenciar os recursos na nuvem. Os recursos existentes (cloud server) ainda poder\u00e3o ser acessados.",
2229+
"message.lock.user.success": "Usu\u00e1rio \"{user}\" bloqueado com sucesso",
22272230
"message.login.failed": "Falha no login",
22282231
"message.memory.usage.info.hypervisor.additionals": "Os dados apresentados podem n\u00e3o refletir o real uso de mem\u00f3ria se a VM n\u00e3o possuir as ferramentas adicionais do virtualizador instaladas",
22292232
"message.memory.usage.info.negative.value": "Se n\u00e3o for poss\u00edvel obter do hypervisor o uso de mem\u00f3ria da VM, ser\u00e3o desabilitadas as linhas de mem\u00f3ria livre do gr\u00e1fico de dados brutos e de uso de mem\u00f3ria no gr\u00e1fico de percentual",

ui/src/config/section/user.js

+15-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,7 @@ export default {
8181
show: (record, store) => {
8282
return ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) && !record.isdefault &&
8383
!(record.domain === 'ROOT' && record.account === 'admin' && record.accounttype === 1) &&
84-
record.state === 'disabled'
84+
['disabled', 'locked'].includes(record.state)
8585
}
8686
},
8787
{
@@ -96,6 +96,20 @@ export default {
9696
record.state === 'enabled'
9797
}
9898
},
99+
{
100+
api: 'lockUser',
101+
icon: 'LockOutlined',
102+
label: 'label.action.lock.user',
103+
message: (record) => ['message.lock.user', { user: record.username }],
104+
successMessage: (record) => ['message.lock.user.success', { user: record.username }],
105+
dataView: true,
106+
popup: true,
107+
show: (record, store) => {
108+
return ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) && !record.isdefault &&
109+
!(record.domain === 'ROOT' && record.account === 'admin' && record.accounttype === 1) &&
110+
record.state === 'enabled'
111+
}
112+
},
99113
{
100114
api: 'authorizeSamlSso',
101115
icon: 'form-outlined',

ui/src/views/AutogenView.vue

+21-15
Original file line numberDiff line numberDiff line change
@@ -183,20 +183,20 @@
183183
<template #message>
184184
<exclamation-circle-outlined style="color: red; fontSize: 30px; display: inline-flex" />
185185
<span style="padding-left: 5px" v-html="`<b>${selectedRowKeys.length} ` + $t('label.items.selected') + `. </b>`" />
186-
<span v-html="$t(currentAction.message)" />
186+
<span v-html="currentAction.message" />
187187
</template>
188188
</a-alert>
189189
<a-alert v-else type="warning">
190190
<template #message>
191191
<span v-if="selectedRowKeys.length > 0" v-html="`<b>${selectedRowKeys.length} ` + $t('label.items.selected') + `. </b>`" />
192-
<span v-html="$t(currentAction.message)" />
192+
<span v-html="currentAction.message" />
193193
</template>
194194
</a-alert>
195195
</div>
196196
<div v-else>
197197
<a-alert type="warning">
198198
<template #message>
199-
<span v-html="$t(currentAction.message)" />
199+
<span v-html="currentAction.message" />
200200
</template>
201201
</a-alert>
202202
</div>
@@ -1145,13 +1145,11 @@ export default {
11451145
this.currentAction.paramFields = []
11461146
this.currentAction.paramFilters = []
11471147
if ('message' in action) {
1148-
var message = action.message
11491148
if (typeof action.message === 'function') {
1150-
message = action.message(action.resource)
1149+
action.message = action.message(action.resource)
11511150
}
1152-
action.message = message
1151+
action.message = Array.isArray(action.message) ? this.$t(...action.message) : this.$t(action.message)
11531152
}
1154-
11551153
this.getArgs(action, isGroupAction, paramFields)
11561154
this.getFilters(action, isGroupAction, paramFields)
11571155
this.getFirstIndexFocus()
@@ -1480,18 +1478,26 @@ export default {
14801478
this.selectedItems.filter(item => item === resource)
14811479
}
14821480
}
1483-
var message = action.successMessage ? this.$t(action.successMessage) : this.$t(action.label) +
1484-
(resourceName ? ' - ' + resourceName : '')
1485-
var duration = 2
1486-
if (action.additionalMessage) {
1487-
message = message + ' - ' + this.$t(action.successMessage)
1488-
duration = 5
1489-
}
14901481
if (this.selectedItems.length === 0) {
1482+
let message = ''
1483+
let messageDuration = 2
1484+
if ('successMessage' in action) {
1485+
message = action.successMessage
1486+
if (typeof action.successMessage === 'function') {
1487+
message = action.successMessage(action.resource)
1488+
}
1489+
message = Array.isArray(message) ? this.$t(...message) : this.$t(message)
1490+
} else {
1491+
message = this.$t(action.label) + (resourceName ? ' - ' + resourceName : '')
1492+
}
1493+
if ('additionalMessage' in action) {
1494+
message = `${message} - ${this.$t(action.additionalMessage)}`
1495+
messageDuration = 5
1496+
}
14911497
this.$message.success({
14921498
content: message,
14931499
key: action.label + resourceName,
1494-
duration: duration
1500+
duration: messageDuration
14951501
})
14961502
}
14971503
break

0 commit comments

Comments
 (0)