mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +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