diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | 22 | ||||
-rw-r--r-- | OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | 18 |
2 files changed, 5 insertions, 35 deletions
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index ba38488..df9bad1 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -677,18 +677,12 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
677 | bool permission = false; | 677 | bool permission = false; |
678 | bool locked = false; | 678 | bool locked = false; |
679 | 679 | ||
680 | if (!m_scene.Entities.ContainsKey(objId)) | 680 | SceneObjectPart part = m_scene.GetSceneObjectPart(objId); |
681 | { | ||
682 | return false; | ||
683 | } | ||
684 | 681 | ||
685 | // If it's not an object, we cant edit it. | 682 | if (part == null) |
686 | if ((!(m_scene.Entities[objId] is SceneObjectGroup))) | ||
687 | { | ||
688 | return false; | 683 | return false; |
689 | } | ||
690 | 684 | ||
691 | SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[objId]; | 685 | SceneObjectGroup group = part.ParentGroup; |
692 | 686 | ||
693 | UUID objectOwner = group.OwnerID; | 687 | UUID objectOwner = group.OwnerID; |
694 | locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0); | 688 | locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0); |
@@ -977,16 +971,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
977 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 971 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
978 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 972 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
979 | 973 | ||
980 | SceneObjectPart part = m_scene.GetSceneObjectPart(objectID); | ||
981 | |||
982 | // If we selected a sub-prim to edit, the objectID won't represent the object, but only a part. | ||
983 | // We have to check the permissions of the group, though. | ||
984 | if (part.ParentID != 0) | ||
985 | { | ||
986 | objectID = part.ParentUUID; | ||
987 | part = m_scene.GetSceneObjectPart(objectID); | ||
988 | } | ||
989 | |||
990 | return GenericObjectPermission(editorID, objectID, false); | 974 | return GenericObjectPermission(editorID, objectID, false); |
991 | } | 975 | } |
992 | 976 | ||
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs index 6031697..7060ef4 100644 --- a/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Framework/Scenes/Scene.Inventory.cs | |||
@@ -1151,34 +1151,20 @@ namespace OpenSim.Region.Framework.Scenes | |||
1151 | return; | 1151 | return; |
1152 | } | 1152 | } |
1153 | 1153 | ||
1154 | UUID partUUID = part.UUID; | ||
1155 | SceneObjectGroup group = part.ParentGroup; | ||
1156 | if (group != null) | ||
1157 | partUUID = group.RootPart.UUID; | ||
1158 | |||
1159 | TaskInventoryItem taskItem = part.Inventory.GetInventoryItem(itemId); | 1154 | TaskInventoryItem taskItem = part.Inventory.GetInventoryItem(itemId); |
1160 | 1155 | ||
1161 | if (null == taskItem) | ||
1162 | { | ||
1163 | m_log.WarnFormat("[PRIM INVENTORY]: Move of inventory item {0} from prim with local id {1} failed" | ||
1164 | + " because the inventory item could not be found", | ||
1165 | itemId, primLocalId); | ||
1166 | |||
1167 | return; | ||
1168 | } | ||
1169 | |||
1170 | if ((taskItem.CurrentPermissions & (uint)PermissionMask.Copy) == 0) | 1156 | if ((taskItem.CurrentPermissions & (uint)PermissionMask.Copy) == 0) |
1171 | { | 1157 | { |
1172 | // If the item to be moved is no copy, we need to be able to | 1158 | // If the item to be moved is no copy, we need to be able to |
1173 | // edit the prim. | 1159 | // edit the prim. |
1174 | if (!Permissions.CanEditObjectInventory(partUUID, remoteClient.AgentId)) | 1160 | if (!Permissions.CanEditObjectInventory(part.UUID, remoteClient.AgentId)) |
1175 | return; | 1161 | return; |
1176 | } | 1162 | } |
1177 | else | 1163 | else |
1178 | { | 1164 | { |
1179 | // If the item is copiable, then we just need to have perms | 1165 | // If the item is copiable, then we just need to have perms |
1180 | // on it. The delete check is a pure rights check | 1166 | // on it. The delete check is a pure rights check |
1181 | if (!Permissions.CanDeleteObject(partUUID, remoteClient.AgentId)) | 1167 | if (!Permissions.CanDeleteObject(part.UUID, remoteClient.AgentId)) |
1182 | return; | 1168 | return; |
1183 | } | 1169 | } |
1184 | 1170 | ||