diff options
Diffstat (limited to 'OpenSim/Region/Environment/PermissionManager.cs')
-rw-r--r-- | OpenSim/Region/Environment/PermissionManager.cs | 34 |
1 files changed, 34 insertions, 0 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 | ||