Disable moderation of users that don't have nicknames or IDs

This commit is contained in:
Angelina Filippova 2020-05-18 20:07:26 +03:00
parent dd4b5b2f21
commit 7b7a05170a
5 changed files with 37 additions and 20 deletions

View file

@ -238,7 +238,8 @@ export default {
unconfirmedEmail: 'User didn\'t confirm the email',
confirmAccount: 'Confirm account',
confirmAccounts: 'Confirm accounts',
resendConfirmation: 'Resend confirmation email'
resendConfirmation: 'Resend confirmation email',
invalidUser: 'This user is invalid and can\'t be modified'
},
statuses: {
statuses: 'Statuses',

View file

@ -24,7 +24,7 @@
<el-dropdown-item v-if="report.state !== 'closed'" @click.native="changeReportState('closed', report.id)">{{ $t('reports.close') }}</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
<moderate-user-dropdown :account="report.account"/>
<moderate-user-dropdown v-if="validAccount(report.account)" :account="report.account"/>
</div>
</div>
<div>
@ -179,6 +179,9 @@ export default {
},
showStatuses(statuses = []) {
return statuses.length > 0
},
validAccount(account) {
return account.nickname && account.id
}
}
}

View file

@ -165,33 +165,33 @@ export default {
}
return {
grantRight: (right) => () => {
const filterUsersFn = user => user.local && !user.roles[right] && this.$store.state.user.id !== user.id
const filterUsersFn = user => user.nickname && user.id && user.local && !user.roles[right] && this.$store.state.user.id !== user.id
const addRightFn = async(users) => await this.$store.dispatch('AddRight', { users, right })
const filtered = this.selectedUsers.filter(filterUsersFn)
applyAction(filtered, addRightFn)
},
revokeRight: (right) => () => {
const filterUsersFn = user => user.local && user.roles[right] && this.$store.state.user.id !== user.id
const filterUsersFn = user => user.nickname && user.id && user.local && user.roles[right] && this.$store.state.user.id !== user.id
const deleteRightFn = async(users) => await this.$store.dispatch('DeleteRight', { users, right })
const filtered = this.selectedUsers.filter(filterUsersFn)
applyAction(filtered, deleteRightFn)
},
activate: () => {
const filtered = this.selectedUsers.filter(user => user.deactivated && this.$store.state.user.id !== user.id)
const filtered = this.selectedUsers.filter(user => user.nickname && user.id && user.deactivated && this.$store.state.user.id !== user.id)
const activateUsersFn = async(users) => await this.$store.dispatch('ActivateUsers', { users })
applyAction(filtered, activateUsersFn)
},
deactivate: () => {
const filtered = this.selectedUsers.filter(user => !user.deactivated && this.$store.state.user.id !== user.id)
const filtered = this.selectedUsers.filter(user => user.nickname && user.id && !user.deactivated && this.$store.state.user.id !== user.id)
const deactivateUsersFn = async(users) => await this.$store.dispatch('DeactivateUsers', { users })
applyAction(filtered, deactivateUsersFn)
},
remove: () => {
const filtered = this.selectedUsers.filter(user => this.$store.state.user.id !== user.id)
const filtered = this.selectedUsers.filter(user => user.nickname && user.id && this.$store.state.user.id !== user.id)
const deleteAccountFn = async(users) => await this.$store.dispatch('DeleteUsers', { users })
applyAction(filtered, deleteAccountFn)
@ -199,34 +199,34 @@ export default {
addTag: (tag) => () => {
const filtered = this.selectedUsers.filter(user =>
tag === 'disable_remote_subscription' || tag === 'disable_any_subscription'
? user.local && !user.tags.includes(tag)
: !user.tags.includes(tag))
? user.nickname && user.id && user.local && !user.tags.includes(tag)
: user.nickname && user.id && !user.tags.includes(tag))
const addTagFn = async(users) => await this.$store.dispatch('AddTag', { users, tag })
applyAction(filtered, addTagFn)
},
removeTag: (tag) => async() => {
const filtered = this.selectedUsers.filter(user =>
tag === 'disable_remote_subscription' || tag === 'disable_any_subscription'
? user.local && user.tags.includes(tag)
: user.tags.includes(tag))
? user.nickname && user.id && user.local && user.tags.includes(tag)
: user.nickname && user.id && user.tags.includes(tag))
const removeTagFn = async(users) => await this.$store.dispatch('RemoveTag', { users, tag })
applyAction(filtered, removeTagFn)
},
requirePasswordReset: () => {
const filtered = this.selectedUsers.filter(user => user.local)
const filtered = this.selectedUsers.filter(user => user.nickname && user.id && user.local)
const requirePasswordResetFn = async(users) => await this.$store.dispatch('RequirePasswordReset', users)
applyAction(filtered, requirePasswordResetFn)
},
confirmAccounts: () => {
const filtered = this.selectedUsers.filter(user => user.local && user.confirmation_pending)
const filtered = this.selectedUsers.filter(user => user.nickname && user.id && user.local && user.confirmation_pending)
const confirmAccountFn = async(users) => await this.$store.dispatch('ConfirmUsersEmail', { users })
applyAction(filtered, confirmAccountFn)
},
resendConfirmation: () => {
const filtered = this.selectedUsers.filter(user => user.local && user.confirmation_pending)
const filtered = this.selectedUsers.filter(user => user.nickname && user.id && user.local && user.confirmation_pending)
const resendConfirmationFn = async(users) => await this.$store.dispatch('ResendConfirmationEmail', users)
applyAction(filtered, resendConfirmationFn)

View file

@ -75,9 +75,11 @@
<el-table-column :label="$t('users.actions')" fixed="right">
<template slot-scope="scope">
<moderation-dropdown
v-if="validUser(scope.row)"
:user="scope.row"
:page="'users'"
@open-reset-token-dialog="openResetPasswordDialog"/>
<span v-else class="invalid-user">{{ $t('users.invalidUser') }}</span>
</template>
</el-table-column>
</el-table>
@ -140,12 +142,6 @@ export default {
normalizedUsersCount() {
return numeral(this.$store.state.users.totalUsersCount).format('0a')
},
users() {
return this.$store.state.users.fetchedUsers
},
usersCount() {
return this.$store.state.users.totalUsersCount
},
pageSize() {
return this.$store.state.users.pageSize
},
@ -164,6 +160,12 @@ export default {
isMobile() {
return this.$store.state.app.device === 'mobile'
},
users() {
return this.$store.state.users.fetchedUsers
},
usersCount() {
return this.$store.state.users.totalUsersCount
},
width() {
return this.isMobile ? 55 : false
}
@ -211,6 +213,9 @@ export default {
},
showDeactivatedButton(id) {
return this.$store.state.user.id !== id
},
validUser(user) {
return user.nickname && user.id
}
}
}
@ -248,6 +253,9 @@ export default {
.create-account > .el-icon-plus {
margin-right: 5px;
}
.invalid-user {
color: gray;
}
.users-header-container {
display: flex;
align-items: center;

View file

@ -7,6 +7,7 @@
</div>
<div class="left-header-container">
<moderation-dropdown
v-if="validUser(user)"
:user="user"
:page="'userPage'"
@open-reset-token-dialog="openResetPasswordDialog"/>
@ -22,6 +23,7 @@
<reboot-button/>
</header>
<moderation-dropdown
v-if="validUser(user)"
:user="user"
:page="'userPage'"
@open-reset-token-dialog="openResetPasswordDialog"/>
@ -182,6 +184,9 @@ export default {
},
openResetPasswordDialog() {
this.resetPasswordDialogOpen = true
},
validUser(user) {
return user.nickname && user.id
}
}
}