Allow locking and unlocking users via UI (#8337)

This commit is contained in:
Fabricio Duarte 2024-02-13 06:30:32 -03:00 committed by GitHub
parent 9b18243b87
commit 3291a62fc1
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 42 additions and 16 deletions

View File

@ -142,6 +142,7 @@
"label.action.iso.permission": "Update ISO permissions", "label.action.iso.permission": "Update ISO permissions",
"label.action.iso.share": "Update ISO sharing", "label.action.iso.share": "Update ISO sharing",
"label.action.lock.account": "Lock Account", "label.action.lock.account": "Lock Account",
"label.action.lock.user": "Lock User",
"label.action.manage.cluster": "Manage cluster", "label.action.manage.cluster": "Manage cluster",
"label.action.migrate.router": "Migrate router", "label.action.migrate.router": "Migrate router",
"label.action.migrate.systemvm": "Migrate System VM", "label.action.migrate.systemvm": "Migrate System VM",
@ -2966,6 +2967,8 @@
"message.loading.delete.tungsten.router.table": "Removing Router Table...", "message.loading.delete.tungsten.router.table": "Removing Router Table...",
"message.loading.delete.tungsten.tag": "Removing Tag...", "message.loading.delete.tungsten.tag": "Removing Tag...",
"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.", "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.",
"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.",
"message.lock.user.success": "Successfully locked User \"{user}\"",
"message.login.failed": "Login Failed", "message.login.failed": "Login Failed",
"message.migrate.instance.host.auto.assign": "Host for the Instance will be automatically chosen based on the suitability within the same cluster", "message.migrate.instance.host.auto.assign": "Host for the Instance will be automatically chosen based on the suitability within the same cluster",
"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.", "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.",

View File

@ -120,6 +120,7 @@
"label.action.iso.permission": "Atualizar permiss\u00f5es da ISO", "label.action.iso.permission": "Atualizar permiss\u00f5es da ISO",
"label.action.iso.share": "Atualizar compartilhamento da ISO", "label.action.iso.share": "Atualizar compartilhamento da ISO",
"label.action.lock.account": "Bloquear conta", "label.action.lock.account": "Bloquear conta",
"label.action.lock.user": "Bloquear usu\u00e1rio",
"label.action.manage.cluster": "Vincular cluster", "label.action.manage.cluster": "Vincular cluster",
"label.action.migrate.router": "Migrar roteador", "label.action.migrate.router": "Migrar roteador",
"label.action.migrate.systemvm": "Migrar VM de sistema", "label.action.migrate.systemvm": "Migrar VM de sistema",
@ -2224,6 +2225,8 @@
"message.listnsp.not.return.providerid": "erro: A API listNetworkServiceProviders n\u00e3o retorna o ID do provedor virtualRouter", "message.listnsp.not.return.providerid": "erro: A API listNetworkServiceProviders n\u00e3o retorna o ID do provedor virtualRouter",
"message.load.host.failed": "Falha ao carregar os hosts", "message.load.host.failed": "Falha ao carregar os hosts",
"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.", "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.",
"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.",
"message.lock.user.success": "Usu\u00e1rio \"{user}\" bloqueado com sucesso",
"message.login.failed": "Falha no login", "message.login.failed": "Falha no login",
"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", "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",
"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", "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",

View File

@ -81,7 +81,7 @@ export default {
show: (record, store) => { show: (record, store) => {
return ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) && !record.isdefault && return ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) && !record.isdefault &&
!(record.domain === 'ROOT' && record.account === 'admin' && record.accounttype === 1) && !(record.domain === 'ROOT' && record.account === 'admin' && record.accounttype === 1) &&
record.state === 'disabled' ['disabled', 'locked'].includes(record.state)
} }
}, },
{ {
@ -96,6 +96,20 @@ export default {
record.state === 'enabled' record.state === 'enabled'
} }
}, },
{
api: 'lockUser',
icon: 'LockOutlined',
label: 'label.action.lock.user',
message: (record) => ['message.lock.user', { user: record.username }],
successMessage: (record) => ['message.lock.user.success', { user: record.username }],
dataView: true,
popup: true,
show: (record, store) => {
return ['Admin', 'DomainAdmin'].includes(store.userInfo.roletype) && !record.isdefault &&
!(record.domain === 'ROOT' && record.account === 'admin' && record.accounttype === 1) &&
record.state === 'enabled'
}
},
{ {
api: 'authorizeSamlSso', api: 'authorizeSamlSso',
icon: 'form-outlined', icon: 'form-outlined',

View File

@ -183,20 +183,20 @@
<template #message> <template #message>
<exclamation-circle-outlined style="color: red; fontSize: 30px; display: inline-flex" /> <exclamation-circle-outlined style="color: red; fontSize: 30px; display: inline-flex" />
<span style="padding-left: 5px" v-html="`<b>${selectedRowKeys.length} ` + $t('label.items.selected') + `. </b>`" /> <span style="padding-left: 5px" v-html="`<b>${selectedRowKeys.length} ` + $t('label.items.selected') + `. </b>`" />
<span v-html="$t(currentAction.message)" /> <span v-html="currentAction.message" />
</template> </template>
</a-alert> </a-alert>
<a-alert v-else type="warning"> <a-alert v-else type="warning">
<template #message> <template #message>
<span v-if="selectedRowKeys.length > 0" v-html="`<b>${selectedRowKeys.length} ` + $t('label.items.selected') + `. </b>`" /> <span v-if="selectedRowKeys.length > 0" v-html="`<b>${selectedRowKeys.length} ` + $t('label.items.selected') + `. </b>`" />
<span v-html="$t(currentAction.message)" /> <span v-html="currentAction.message" />
</template> </template>
</a-alert> </a-alert>
</div> </div>
<div v-else> <div v-else>
<a-alert type="warning"> <a-alert type="warning">
<template #message> <template #message>
<span v-html="$t(currentAction.message)" /> <span v-html="currentAction.message" />
</template> </template>
</a-alert> </a-alert>
</div> </div>
@ -1145,13 +1145,11 @@ export default {
this.currentAction.paramFields = [] this.currentAction.paramFields = []
this.currentAction.paramFilters = [] this.currentAction.paramFilters = []
if ('message' in action) { if ('message' in action) {
var message = action.message
if (typeof action.message === 'function') { if (typeof action.message === 'function') {
message = action.message(action.resource) action.message = action.message(action.resource)
} }
action.message = message action.message = Array.isArray(action.message) ? this.$t(...action.message) : this.$t(action.message)
} }
this.getArgs(action, isGroupAction, paramFields) this.getArgs(action, isGroupAction, paramFields)
this.getFilters(action, isGroupAction, paramFields) this.getFilters(action, isGroupAction, paramFields)
this.getFirstIndexFocus() this.getFirstIndexFocus()
@ -1480,18 +1478,26 @@ export default {
this.selectedItems.filter(item => item === resource) this.selectedItems.filter(item => item === resource)
} }
} }
var message = action.successMessage ? this.$t(action.successMessage) : this.$t(action.label) +
(resourceName ? ' - ' + resourceName : '')
var duration = 2
if (action.additionalMessage) {
message = message + ' - ' + this.$t(action.successMessage)
duration = 5
}
if (this.selectedItems.length === 0) { if (this.selectedItems.length === 0) {
let message = ''
let messageDuration = 2
if ('successMessage' in action) {
message = action.successMessage
if (typeof action.successMessage === 'function') {
message = action.successMessage(action.resource)
}
message = Array.isArray(message) ? this.$t(...message) : this.$t(message)
} else {
message = this.$t(action.label) + (resourceName ? ' - ' + resourceName : '')
}
if ('additionalMessage' in action) {
message = `${message} - ${this.$t(action.additionalMessage)}`
messageDuration = 5
}
this.$message.success({ this.$message.success({
content: message, content: message,
key: action.label + resourceName, key: action.label + resourceName,
duration: duration duration: messageDuration
}) })
} }
break break