diff options
-rw-r--r-- | OpenSim/Region/Environment/PermissionManager.cs | 34 | ||||
-rw-r--r-- | OpenSim/Region/Environment/Scenes/InnerScene.cs | 2 |
2 files changed, 35 insertions, 1 deletions
diff --git a/OpenSim/Region/Environment/PermissionManager.cs b/OpenSim/Region/Environment/PermissionManager.cs index 3d008a7..a6acca7 100644 --- a/OpenSim/Region/Environment/PermissionManager.cs +++ b/OpenSim/Region/Environment/PermissionManager.cs | |||
@@ -405,6 +405,40 @@ namespace OpenSim.Region.Environment | |||
405 | permission = false; | 405 | permission = false; |
406 | 406 | ||
407 | } | 407 | } |
408 | else | ||
409 | { | ||
410 | bool locked = false; | ||
411 | if (!m_scene.Entities.ContainsKey(obj)) | ||
412 | { | ||
413 | return false; | ||
414 | } | ||
415 | |||
416 | // If it's not an object, we cant edit it. | ||
417 | if ((!(m_scene.Entities[obj] is SceneObjectGroup))) | ||
418 | { | ||
419 | return false; | ||
420 | } | ||
421 | |||
422 | |||
423 | SceneObjectGroup group = (SceneObjectGroup)m_scene.Entities[obj]; | ||
424 | |||
425 | LLUUID objectOwner = group.OwnerID; | ||
426 | locked = ((group.RootPart.OwnerMask & PERM_LOCKED) == 0); | ||
427 | |||
428 | |||
429 | // This is an exception to the generic object permission. | ||
430 | // Administrators who lock their objects should not be able to move them, | ||
431 | // however generic object permission should return true. | ||
432 | // This keeps locked objects from being affected by random click + drag actions by accident | ||
433 | // and allows the administrator to grab or delete a locked object. | ||
434 | |||
435 | // Administrators and estate managers are still able to click+grab locked objects not | ||
436 | // owned by them in the scene | ||
437 | // This is by design. | ||
438 | |||
439 | if (locked && (user == objectOwner)) | ||
440 | return false; | ||
441 | } | ||
408 | return permission; | 442 | return permission; |
409 | } | 443 | } |
410 | 444 | ||
diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs index a041a52..f37d28a 100644 --- a/OpenSim/Region/Environment/Scenes/InnerScene.cs +++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs | |||
@@ -998,7 +998,7 @@ namespace OpenSim.Region.Environment.Scenes | |||
998 | SceneObjectGroup group = GetGroupByPrim(objectID); | 998 | SceneObjectGroup group = GetGroupByPrim(objectID); |
999 | if (group != null) | 999 | if (group != null) |
1000 | { | 1000 | { |
1001 | if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) | 1001 | if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID))// && PermissionsMngr.) |
1002 | { | 1002 | { |
1003 | group.GrabMovement(offset, pos, remoteClient); | 1003 | group.GrabMovement(offset, pos, remoteClient); |
1004 | } | 1004 | } |