From 984345a2022ba805869990e0c495af08ffe40ce9 Mon Sep 17 00:00:00 2001 From: UbitUmarov Date: Thu, 19 Jan 2017 13:10:04 +0000 Subject: add CanEdit check for SOGs, iclients and SPs that need to be in scene and use it --- .../Region/Framework/Scenes/Scene.Permissions.cs | 44 +++++++++++++++++----- 1 file changed, 34 insertions(+), 10 deletions(-) (limited to 'OpenSim/Region/Framework/Scenes/Scene.Permissions.cs') diff --git a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs index e066c0a..3491792 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs @@ -48,7 +48,8 @@ namespace OpenSim.Region.Framework.Scenes public delegate bool SellGroupObjectHandler(UUID userID, UUID groupID, Scene scene); public delegate bool TakeCopyObjectHandler(SceneObjectGroup sog, ScenePresence sp); public delegate bool DuplicateObjectHandler(int objectCount, UUID objectID, UUID owner, Scene scene, Vector3 objectPosition); - public delegate bool EditObjectHandler(UUID objectID, UUID editorID, Scene scene); + public delegate bool EditObjectByIDsHandler(UUID objectID, UUID editorID, Scene scene); + public delegate bool EditObjectHandler(SceneObjectGroup sog, ScenePresence sp); public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID, Scene scene); public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp); public delegate bool ObjectEntryHandler(UUID objectID, bool enteringRegion, Vector3 newPoint, Scene scene); @@ -118,6 +119,7 @@ namespace OpenSim.Region.Framework.Scenes public event SellGroupObjectHandler OnSellGroupObject; public event TakeCopyObjectHandler OnTakeCopyObject; public event DuplicateObjectHandler OnDuplicateObject; + public event EditObjectByIDsHandler OnEditObjectByIDs; public event EditObjectHandler OnEditObject; public event EditObjectInventoryHandler OnEditObjectInventory; public event MoveObjectHandler OnMoveObject; @@ -307,6 +309,9 @@ namespace OpenSim.Region.Framework.Scenes TakeObjectHandler handler = OnTakeObject; if (handler != null) { + if(sog == null || sp == null) + return false; + Delegate[] list = handler.GetInvocationList(); foreach (TakeObjectHandler h in list) { @@ -364,6 +369,8 @@ namespace OpenSim.Region.Framework.Scenes TakeCopyObjectHandler handler = OnTakeCopyObject; if (handler != null) { + if(sog == null || sp == null) + return false; Delegate[] list = handler.GetInvocationList(); foreach (TakeCopyObjectHandler h in list) { @@ -419,13 +426,33 @@ namespace OpenSim.Region.Framework.Scenes #region EDIT OBJECT public bool CanEditObject(UUID objectID, UUID editorID) { + EditObjectByIDsHandler handler = OnEditObjectByIDs; + if (handler != null) + { + Delegate[] list = handler.GetInvocationList(); + foreach (EditObjectByIDsHandler h in list) + { + if (h(objectID, editorID, m_scene) == false) + return false; + } + } + return true; + } + + public bool CanEditObject(SceneObjectGroup sog, IClientAPI client) + { EditObjectHandler handler = OnEditObject; if (handler != null) { + if(sog == null || client == null || client.SceneAgent == null) + return false; + + ScenePresence sp = client.SceneAgent as ScenePresence; + Delegate[] list = handler.GetInvocationList(); foreach (EditObjectHandler h in list) { - if (h(objectID, editorID, m_scene) == false) + if (h(sog, sp) == false) return false; } } @@ -452,17 +479,14 @@ namespace OpenSim.Region.Framework.Scenes #region MOVE OBJECT public bool CanMoveObject(SceneObjectGroup sog, IClientAPI client) { - if(sog == null || client == null) - return false; - - if(client.SceneAgent == null) - return false; - - ScenePresence sp = client.SceneAgent as ScenePresence; - MoveObjectHandler handler = OnMoveObject; if (handler != null) { + if(sog == null || client == null || client.SceneAgent == null) + return false; + + ScenePresence sp = client.SceneAgent as ScenePresence; + Delegate[] list = handler.GetInvocationList(); foreach (MoveObjectHandler h in list) { -- cgit v1.1