fix: #12057, allow gmods to change user email

This commit is contained in:
Barış Soner Uşaklı
2023-10-03 20:42:43 -04:00
parent 56794cf869
commit 344ece8db5
3 changed files with 9 additions and 7 deletions

View File

@@ -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,

View File

@@ -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 {

View File

@@ -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,
}); });