def METHOD_NAME(self, payload, **kwargs):
    error = ApiError.RESOURCE_INVALID.copy()
    if 'roles_new' in payload:
        role_ids = payload.get('roles_new', [])
        roles_new = self.check_roles(role_ids)
        payload['roles_new'] = roles_new
        access = get_access_for_roles(
            roles_new,
            Entity.PROJECT,
            get_project_uuid(),
        )
        if self.current_user.is_admin:
            if self.owner:
                error.METHOD_NAME(
                    {'message': 'Admins cannot update users who are Owners.'})
                raise ApiError(error)
            elif self.is_admin and self.current_user.id != self.id:
                error.METHOD_NAME(
                    {'message': 'Admins cannot update users who are Admins.'})
                raise ApiError(error)
            elif access & Permission.Access.ADMIN != 0:
                error.METHOD_NAME(
                    {'message': 'Admins cannot make other users Admins.'})
                raise ApiError(error)
            elif access & Permission.Access.OWNER != 0:
                error.METHOD_NAME(
                    {'message': 'Admins cannot make other users Owners.'})
                raise ApiError(error)
    password = payload.get('password')
    if password:
        password_current = payload.get('password_current')
        password_confirmation = payload.get('password_confirmation')
        if self.current_user.id == self.id or \
                (not self.current_user.owner and self.current_user.roles & 1 == 0):
            if not password_current or not verify_password(
                password_current,
                self.password_hash,
            ):
                error.METHOD_NAME(
                    {'message': 'Current password is incorrect.'})
                raise ApiError(error)
        if len(password) < 8:
            error.METHOD_NAME(
                {'message': 'Password must be 8 characters or longer.'})
            raise ApiError(error)
        if password != password_confirmation:
            error.METHOD_NAME(
                {'message': 'Password and password confirmation do not match.'})
            raise ApiError(error)
        password_salt = generate_salt()
        payload['password_hash'] = create_bcrypt_hash(password, password_salt)
        payload['password_salt'] = password_salt
    return super().METHOD_NAME(ignore_keys(payload, [
        'password',
        'password_confirmation',
        'password_current',
        'owner',
        'project_access',
        'roles_display',
    ]), **kwargs)