mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
fix: #12057, allow gmods to change user email
This commit is contained in:
@@ -27,7 +27,7 @@ define('forum/account/edit', [
|
|||||||
updateAboutMe();
|
updateAboutMe();
|
||||||
handleGroupSort();
|
handleGroupSort();
|
||||||
|
|
||||||
if (!ajaxify.data.isSelf && app.user.isAdmin) {
|
if (!ajaxify.data.isSelf && ajaxify.data.canEdit) {
|
||||||
$(`a[href="${config.relative_path}/user/${ajaxify.data.userslug}/edit/email"]`).on('click', () => {
|
$(`a[href="${config.relative_path}/user/${ajaxify.data.userslug}/edit/email"]`).on('click', () => {
|
||||||
changeEmail.init({
|
changeEmail.init({
|
||||||
uid: ajaxify.data.uid,
|
uid: ajaxify.data.uid,
|
||||||
|
|||||||
@@ -413,10 +413,9 @@ usersAPI.getInviteGroups = async (caller, { uid }) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
usersAPI.addEmail = async (caller, { email, skipConfirmation, uid }) => {
|
usersAPI.addEmail = async (caller, { email, skipConfirmation, uid }) => {
|
||||||
const canManageUsers = await privileges.admin.can('admin:users', caller.uid);
|
const isSelf = parseInt(caller.uid, 10) === parseInt(uid, 10);
|
||||||
skipConfirmation = canManageUsers && skipConfirmation;
|
const canEdit = await privileges.users.canEdit(caller.uid, uid);
|
||||||
|
if (skipConfirmation && canEdit && !isSelf) {
|
||||||
if (skipConfirmation) {
|
|
||||||
if (!email.length) {
|
if (!email.length) {
|
||||||
await user.email.remove(uid);
|
await user.email.remove(uid);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@@ -77,17 +77,20 @@ privsUsers.canEdit = async function (callerUid, uid) {
|
|||||||
if (parseInt(callerUid, 10) === parseInt(uid, 10)) {
|
if (parseInt(callerUid, 10) === parseInt(uid, 10)) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
const [isAdmin, isGlobalMod, isTargetAdmin] = await Promise.all([
|
const privsAdmin = require('./admin');
|
||||||
|
const [isAdmin, isGlobalMod, isTargetAdmin, canManageUsers] = await Promise.all([
|
||||||
privsUsers.isAdministrator(callerUid),
|
privsUsers.isAdministrator(callerUid),
|
||||||
privsUsers.isGlobalModerator(callerUid),
|
privsUsers.isGlobalModerator(callerUid),
|
||||||
privsUsers.isAdministrator(uid),
|
privsUsers.isAdministrator(uid),
|
||||||
|
privsAdmin.can('admin:users', callerUid),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
const data = await plugins.hooks.fire('filter:user.canEdit', {
|
const data = await plugins.hooks.fire('filter:user.canEdit', {
|
||||||
isAdmin: isAdmin,
|
isAdmin: isAdmin,
|
||||||
isGlobalMod: isGlobalMod,
|
isGlobalMod: isGlobalMod,
|
||||||
isTargetAdmin: isTargetAdmin,
|
isTargetAdmin: isTargetAdmin,
|
||||||
canEdit: isAdmin || (isGlobalMod && !isTargetAdmin),
|
canManageUsers: canManageUsers,
|
||||||
|
canEdit: isAdmin || ((isGlobalMod || canManageUsers) && !isTargetAdmin),
|
||||||
callerUid: callerUid,
|
callerUid: callerUid,
|
||||||
uid: uid,
|
uid: uid,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user