From d60e4574633e50d257730cc582a6efb63c8e9d7b Mon Sep 17 00:00:00 2001 From: Teravus Ovares Date: Thu, 15 May 2008 19:28:10 +0000 Subject: Committing patch from Melanie. 0001290: [PATCH] implement permissions propagation and script module hooks. Thanks Melanie! * Implements quite a few inventory related perms. * (from Teravus) Fixes Take Copy --- .../Scenes/SceneObjectGroup.Inventory.cs | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs') diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs index 721680f..8a7096f 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.Inventory.cs @@ -25,6 +25,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +using System; using System.Reflection; using libsecondlife; using log4net; @@ -282,5 +283,38 @@ namespace OpenSim.Region.Environment.Scenes return -1; } + + public uint GetEffectivePermissions() + { + uint perms=(uint)(PermissionMask.Modify | + PermissionMask.Copy | + PermissionMask.Move | + PermissionMask.Transfer) | 7; + + foreach (SceneObjectPart part in m_parts.Values) + perms &= part.MaskEffectivePermissions(); + + if((RootPart.OwnerMask & (uint)PermissionMask.Modify) == 0) + perms &= ~(uint)PermissionMask.Modify; + if((RootPart.OwnerMask & (uint)PermissionMask.Copy) == 0) + perms &= ~(uint)PermissionMask.Copy; + if((RootPart.OwnerMask & (uint)PermissionMask.Transfer) == 0) + perms &= ~(uint)PermissionMask.Transfer; + + if((RootPart.OwnerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Modify) == 0) + perms &= ~((uint)PermissionMask.Modify >> 13); + if((RootPart.OwnerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Copy) == 0) + perms &= ~((uint)PermissionMask.Copy >> 13); + if((RootPart.OwnerMask & RootPart.NextOwnerMask & (uint)PermissionMask.Transfer) == 0) + perms &= ~((uint)PermissionMask.Transfer >> 13); + + return perms; + } + + public void ApplyNextOwnerPermissions() + { + foreach (SceneObjectPart part in m_parts.Values) + part.ApplyNextOwnerPermissions(); + } } } -- cgit v1.1