diff options
| author | Dave Parks <davep@lindenlab.com> | 2024-06-07 09:51:32 -0500 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-06-07 09:51:32 -0500 | 
| commit | 33ddedd6b557ed9130dd8cd3b8327a697614a3ac (patch) | |
| tree | 6c4ad8ce0e9bbaa1b7f5838470cd15a415210e87 | |
| parent | 40197e89491af5a34c5ba11cdeeeacbee9fccf4f (diff) | |
#1638 Add permissions checks to GLTF Save As and Upload buttons (#1653)
| -rw-r--r-- | indra/llinventory/llpermissions.h | 32 | ||||
| -rw-r--r-- | indra/newview/gltf/asset.h | 4 | ||||
| -rw-r--r-- | indra/newview/llviewermenu.cpp | 30 | ||||
| -rw-r--r-- | indra/newview/skins/default/xui/en/menu_viewer.xml | 4 | 
4 files changed, 47 insertions, 23 deletions
| diff --git a/indra/llinventory/llpermissions.h b/indra/llinventory/llpermissions.h index dfe527f314..a68abcfa34 100644 --- a/indra/llinventory/llpermissions.h +++ b/indra/llinventory/llpermissions.h @@ -270,6 +270,7 @@ public:      inline bool allowModifyBy(const LLUUID &agent_id) const;      inline bool allowCopyBy(const LLUUID& agent_id) const;      inline bool allowMoveBy(const LLUUID& agent_id) const; +      inline bool allowModifyBy(const LLUUID &agent_id, const LLUUID& group) const;      inline bool allowCopyBy(const LLUUID& agent_id, const LLUUID& group) const;      inline bool allowMoveBy(const LLUUID &agent_id, const LLUUID &group) const; @@ -278,27 +279,11 @@ public:      // current owner is allowed to transfer to the specified agent id.      inline bool allowTransferTo(const LLUUID &agent_id) const; -    // -    // DEPRECATED. -    // -    // These return true if the given agent can perform the function. -    // They also return true if the object isn't owned, or the -    // requesting agent is a system agent.  See llpermissionsflags.h -    // for bits. -    //bool  allowDeleteBy(const LLUUID& agent_id)   const       { return allowModifyBy(agent_id); } -    //bool  allowEditBy(const LLUUID& agent_id)     const       { return allowModifyBy(agent_id); } -    // saves last owner and sets current owner -    //bool setOwner(const LLUUID& agent, const LLUUID& owner); -    // This method saves the last owner, sets the current owner to the -    // one provided, and sets the base mask as indicated. -    //bool setOwner(const LLUUID& agent, const LLUUID& owner, U32 new_base_mask); - -    // Attempt to set or clear the given bitmask.  Returns true if you -    // are allowed to modify the permissions.  If you attempt to turn -    // on bits not allowed by the base bits, the function will return -    // true, but those bits will not be set. -    //bool setGroupBits( const LLUUID& agent, bool set, PermissionMask bits); -    //bool setEveryoneBits(const LLUUID& agent, bool set, PermissionMask bits); +    // Returns true if the object can exported by the given agent +    // (e.g. saved as a local .gltf file) +    // The current test should return true if the agent is the owner +    // AND the creator of the object. +    inline bool allowExportBy(const LLUUID& agent_id) const;      //      // MISC METHODS and OPERATORS @@ -353,6 +338,11 @@ bool LLPermissions::allowMoveBy(const LLUUID& agent) const      return allowOperationBy(PERM_MOVE, agent, LLUUID::null);  } +bool LLPermissions::allowExportBy(const LLUUID& agent) const +{ +    return agent == mOwner && agent == mCreator; +} +  bool LLPermissions::allowTransferTo(const LLUUID &agent_id) const  {      if (mIsGroupOwned) diff --git a/indra/newview/gltf/asset.h b/indra/newview/gltf/asset.h index 022fc484c2..fd7ea17f05 100644 --- a/indra/newview/gltf/asset.h +++ b/indra/newview/gltf/asset.h @@ -368,6 +368,10 @@ namespace LL              // remove the bufferview at the given index              // updates all bufferview indices in this Asset as needed              void eraseBufferView(S32 bufferView); + +            // return true if this Asset has been loaded as a local preview +            // Local previews may be uploaded or exported to disk +            bool isLocalPreview() { return !mFilename.empty(); }          };          Material::AlphaMode gltf_alpha_mode_to_enum(const std::string& alpha_mode); diff --git a/indra/newview/llviewermenu.cpp b/indra/newview/llviewermenu.cpp index 6a61c8bac8..7e58a604f6 100644 --- a/indra/newview/llviewermenu.cpp +++ b/indra/newview/llviewermenu.cpp @@ -143,6 +143,7 @@  #include "llcleanup.h"  #include "llviewershadermgr.h"  #include "gltfscenemanager.h" +#include "gltf/asset.h"  using namespace LLAvatarAppearanceDefines; @@ -3325,6 +3326,33 @@ bool enable_gltf()      return enablegltf;  } +bool enable_gltf_save_as() +{ +    if (enable_gltf()) +    { +        LLViewerObject* obj = LLSelectMgr::getInstance()->getSelection()->getFirstRootObject(); +        if (obj) +        { +            if (obj->mGLTFAsset && obj->mGLTFAsset->isLocalPreview()) +            { +                return true; +            } + +            LLPermissions* permissions = LLSelectMgr::getInstance()->findObjectPermissions(obj); +            if (permissions) +            { +                return permissions->allowExportBy(gAgent.getID()); +            } +        } +    } +    return false; +} + +bool enable_gltf_upload() +{ +    return enable_gltf_save_as(); +} +  class LLSelfRemoveAllAttachments : public view_listener_t  {      bool handleEvent(const LLSD& userdata) @@ -10091,6 +10119,8 @@ void initialize_menus()      enable.add("EnableSelectInPathfindingCharacters", boost::bind(&enable_object_select_in_pathfinding_characters));      enable.add("Advanced.EnableErrorOSException", boost::bind(&enable_os_exception));      enable.add("EnableGLTF", boost::bind(&enable_gltf)); +    enable.add("EnableGLTFSaveAs", boost::bind(&enable_gltf_save_as)); +    enable.add("EnableGLTFUpload", boost::bind(&enable_gltf_upload));      view_listener_t::addMenu(new LLFloaterVisible(), "FloaterVisible");      view_listener_t::addMenu(new LLShowSidetrayPanel(), "ShowSidetrayPanel"); diff --git a/indra/newview/skins/default/xui/en/menu_viewer.xml b/indra/newview/skins/default/xui/en/menu_viewer.xml index daf8dd4208..0e7c522f74 100644 --- a/indra/newview/skins/default/xui/en/menu_viewer.xml +++ b/indra/newview/skins/default/xui/en/menu_viewer.xml @@ -2875,7 +2875,7 @@ function="World.EnvPreset"           label="Save As..."           name="Save As...">            <menu_item_call.on_enable -             function="EnableGLTF"/> +             function="EnableGLTFSaveAs"/>            <menu_item_call.on_click             function="Advanced.ClickGLTFSaveAs" />          </menu_item_call> @@ -2883,7 +2883,7 @@ function="World.EnvPreset"           label="Upload..."           name="Upload...">            <menu_item_call.on_enable -             function="EnableGLTF"/> +             function="EnableGLTFUpload"/>            <menu_item_call.on_click             function="Advanced.ClickGLTFUpload" />          </menu_item_call> | 
