From b48d3e0387a95f664e71623dbd73597b41c95b7a Mon Sep 17 00:00:00 2001 From: David Rowe Date: Tue, 16 Mar 2021 12:00:34 +1300 Subject: [PATCH] Tidy disabling of avatar entity manipulation if don't have permission --- interface/src/avatar/MyAvatar.cpp | 43 ++++++++++++++++++- .../entities/src/EntityScriptingInterface.cpp | 2 +- 2 files changed, 43 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 8e92a434f5..71c54e1202 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1537,6 +1537,11 @@ void MyAvatar::storeAvatarEntityDataPayload(const QUuid& entityID, const QByteAr void MyAvatar::clearAvatarEntity(const QUuid& entityID, bool requiresRemovalFromTree) { // NOTE: the requiresRemovalFromTree argument is unused + if (!DependencyManager::get()->getThisNodeCanRezAvatarEntities()) { + qCDebug(interfaceapp) << "Ignoring clearAvatarEntity() because don't have canRezAvatarEntities permission on domain"; + return; + } + AvatarData::clearAvatarEntity(entityID); if (!DependencyManager::get()->getThisNodeCanRezAvatarEntities()) { @@ -1872,6 +1877,11 @@ AvatarEntityMap MyAvatar::getAvatarEntityData() const { return data; } + if (!DependencyManager::get()->getThisNodeCanRezAvatarEntities()) { + qCDebug(interfaceapp) << "Ignoring getAvatarEntityData() because don't have canRezAvatarEntities permission on domain"; + return data; + } + QList avatarEntityIDs; _avatarEntitiesLock.withReadLock([&] { avatarEntityIDs = _packedAvatarEntityData.keys(); @@ -2615,6 +2625,13 @@ QVariantList MyAvatar::getAvatarEntitiesVariant() { QVariantList avatarEntitiesData; auto treeRenderer = DependencyManager::get(); EntityTreePointer entityTree = treeRenderer ? treeRenderer->getTree() : nullptr; + + if (entityTree && !DependencyManager::get()->getThisNodeCanRezAvatarEntities()) { + qCDebug(interfaceapp) + << "Ignoring getAvatarEntitiesVariant() because don't have canRezAvatarEntities permission on domain"; + return avatarEntitiesData; + } + if (entityTree) { QList avatarEntityIDs; _avatarEntitiesLock.withReadLock([&] { @@ -2973,6 +2990,11 @@ void MyAvatar::detachOne(const QString& modelURL, const QString& jointName) { ); return; } + if (!DependencyManager::get()->getThisNodeCanRezAvatarEntities()) { + qCDebug(interfaceapp) << "Ignoring detachOne() because don't have canRezAvatarEntities permission on domain"; + return; + } + QUuid entityID; if (findAvatarEntity(modelURL, jointName, entityID)) { DependencyManager::get()->deleteEntity(entityID); @@ -2988,6 +3010,11 @@ void MyAvatar::detachAll(const QString& modelURL, const QString& jointName) { ); return; } + if (!DependencyManager::get()->getThisNodeCanRezAvatarEntities()) { + qCDebug(interfaceapp) << "Ignoring detachAll() because don't have canRezAvatarEntities permission on domain"; + return; + } + QUuid entityID; while (findAvatarEntity(modelURL, jointName, entityID)) { DependencyManager::get()->deleteEntity(entityID); @@ -3028,6 +3055,12 @@ void MyAvatar::setAttachmentData(const QVector& attachmentData) QVector MyAvatar::getAttachmentData() const { QVector attachmentData; + + if (!DependencyManager::get()->getThisNodeCanRezAvatarEntities()) { + qCDebug(interfaceapp) << "Ignoring getAttachmentData() because don't have canRezAvatarEntities permission on domain"; + return attachmentData; + } + QList avatarEntityIDs; _avatarEntitiesLock.withReadLock([&] { avatarEntityIDs = _packedAvatarEntityData.keys(); @@ -3042,6 +3075,13 @@ QVector MyAvatar::getAttachmentData() const { QVariantList MyAvatar::getAttachmentsVariant() const { QVariantList result; + + if (!DependencyManager::get()->getThisNodeCanRezAvatarEntities()) { + qCDebug(interfaceapp) + << "Ignoring getAttachmentsVariant() because don't have canRezAvatarEntities permission on domain"; + return result; + } + for (const auto& attachment : getAttachmentData()) { result.append(attachment.toVariant()); } @@ -3056,7 +3096,8 @@ void MyAvatar::setAttachmentsVariant(const QVariantList& variant) { } if (!DependencyManager::get()->getThisNodeCanRezAvatarEntities()) { - qCDebug(interfaceapp) << "Ignoring setAttachmentsVariant() because don't have canRezAvatarEntities permission on domain"; + qCDebug(interfaceapp) + << "Ignoring setAttachmentsVariant() because don't have canRezAvatarEntities permission on domain"; return; } diff --git a/libraries/entities/src/EntityScriptingInterface.cpp b/libraries/entities/src/EntityScriptingInterface.cpp index fc7dca5f7c..d87bab97cd 100644 --- a/libraries/entities/src/EntityScriptingInterface.cpp +++ b/libraries/entities/src/EntityScriptingInterface.cpp @@ -492,7 +492,7 @@ QUuid EntityScriptingInterface::addEntityInternal(const EntityItemProperties& pr if (entityHostType == entity::HostType::AVATAR && !nodeList->getThisNodeCanRezAvatarEntities()) { qCDebug(entities) << "Ignoring addEntity() because don't have canRezAvatarEntities permission on domain"; // Only need to intercept methods that may add an avatar entity because avatar entities are removed from the tree when - // user doesn't have canRezAvatarEntities permission. + // the user doesn't have canRezAvatarEntities permission. return QUuid(); }