From 359908fa88c4f9188746e87350701750478fbf2f Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Mon, 20 Jun 2016 10:08:15 -0700 Subject: Related to mantis #7929: "For sale" was not being accepted, because of permissions fail. This adds a new permissions check CanSellGroupObject. THIRD-PARTY PERMISSIONS MODULES TAKE NOTE OF THIS NEW EVENT. --- .../CoreModules/World/Objects/BuySell/BuySellModule.cs | 16 +++++++++++++--- .../CoreModules/World/Permissions/PermissionsModule.cs | 9 +++++++++ 2 files changed, 22 insertions(+), 3 deletions(-) (limited to 'OpenSim/Region/CoreModules/World') diff --git a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs index 0e0f05f..42141e4 100644 --- a/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs +++ b/OpenSim/Region/CoreModules/World/Objects/BuySell/BuySellModule.cs @@ -45,8 +45,8 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell [Extension(Path = "/OpenSim/RegionModules", NodeName = "RegionModule", Id = "BuySellModule")] public class BuySellModule : IBuySellModule, INonSharedRegionModule { -// private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + protected Scene m_scene = null; protected IDialogModule m_dialogModule; @@ -92,9 +92,19 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell if (part.ParentGroup.IsDeleted) return; - if (part.OwnerID != client.AgentId && (!m_scene.Permissions.IsGod(client.AgentId))) + if (part.OwnerID != part.GroupID && part.OwnerID != client.AgentId && (!m_scene.Permissions.IsGod(client.AgentId))) return; + if (part.OwnerID == part.GroupID) // Group owned + { + // Does the user have the power to put the object on sale? + if (!m_scene.Permissions.CanSellGroupObject(client.AgentId, part.GroupID, m_scene)) + { + client.SendAgentAlertMessage("You don't have permission to set group-owned objects on sale", false); + return; + } + } + part = part.ParentGroup.RootPart; part.ObjectSaleType = saleType; diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index b57c3d7..c83454e 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs @@ -288,6 +288,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions m_scene.Permissions.OnCompileScript += CanCompileScript; m_scene.Permissions.OnSellParcel += CanSellParcel; m_scene.Permissions.OnTakeObject += CanTakeObject; + m_scene.Permissions.OnSellGroupObject += CanSellGroupObject; m_scene.Permissions.OnTakeCopyObject += CanTakeCopyObject; m_scene.Permissions.OnTerraformLand += CanTerraformLand; m_scene.Permissions.OnLinkObject += CanLinkObject; @@ -1511,6 +1512,14 @@ namespace OpenSim.Region.CoreModules.World.Permissions return GenericParcelOwnerPermission(user, parcel, (ulong)GroupPowers.LandSetSale, true); } + private bool CanSellGroupObject(UUID userID, UUID groupID, Scene scene) + { + DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); + if (m_bypassPermissions) return m_bypassPermissionsValue; + + return IsGroupMember(groupID, userID, (ulong)GroupPowers.ObjectSetForSale); + } + private bool CanTakeObject(UUID objectID, UUID stealer, Scene scene) { DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); -- cgit v1.1