aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs33
-rw-r--r--OpenSim/Region/Framework/Scenes/Scene.Permissions.cs20
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectPart.cs7
3 files changed, 57 insertions, 3 deletions
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
index 4c4a8a5..45c1c56 100644
--- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
+++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs
@@ -293,6 +293,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
293 scenePermissions.OnDeleteObject += CanDeleteObject; 293 scenePermissions.OnDeleteObject += CanDeleteObject;
294 scenePermissions.OnEditObjectByIDs += CanEditObjectByIDs; 294 scenePermissions.OnEditObjectByIDs += CanEditObjectByIDs;
295 scenePermissions.OnEditObject += CanEditObject; 295 scenePermissions.OnEditObject += CanEditObject;
296 scenePermissions.OnEditObjectPerms += CanEditObjectPerms;
296 scenePermissions.OnInventoryTransfer += CanInventoryTransfer; 297 scenePermissions.OnInventoryTransfer += CanInventoryTransfer;
297 scenePermissions.OnMoveObject += CanMoveObject; 298 scenePermissions.OnMoveObject += CanMoveObject;
298 scenePermissions.OnTakeObject += CanTakeObject; 299 scenePermissions.OnTakeObject += CanTakeObject;
@@ -391,6 +392,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
391 scenePermissions.OnDeleteObject -= CanDeleteObject; 392 scenePermissions.OnDeleteObject -= CanDeleteObject;
392 scenePermissions.OnEditObjectByIDs -= CanEditObjectByIDs; 393 scenePermissions.OnEditObjectByIDs -= CanEditObjectByIDs;
393 scenePermissions.OnEditObject -= CanEditObject; 394 scenePermissions.OnEditObject -= CanEditObject;
395 scenePermissions.OnEditObjectPerms -= CanEditObjectPerms;
394 scenePermissions.OnInventoryTransfer -= CanInventoryTransfer; 396 scenePermissions.OnInventoryTransfer -= CanInventoryTransfer;
395 scenePermissions.OnMoveObject -= CanMoveObject; 397 scenePermissions.OnMoveObject -= CanMoveObject;
396 scenePermissions.OnTakeObject -= CanTakeObject; 398 scenePermissions.OnTakeObject -= CanTakeObject;
@@ -1387,6 +1389,35 @@ namespace OpenSim.Region.CoreModules.World.Permissions
1387 return true; 1389 return true;
1388 } 1390 }
1389 1391
1392 private bool CanEditObjectPerms(SceneObjectGroup sog, UUID userID)
1393 {
1394 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
1395 if (m_bypassPermissions) return m_bypassPermissionsValue;
1396
1397 if (sog == null)
1398 return false;
1399
1400 if(sog.OwnerID == userID || IsAdministrator(userID))
1401 return true;
1402
1403 UUID sogGroupID = sog.GroupID;
1404 if(sogGroupID == UUID.Zero || sogGroupID != sog.OwnerID)
1405 return false;
1406
1407 uint perms = sog.EffectiveOwnerPerms;
1408 if((perms & (uint)PermissionMask.Modify) == 0)
1409 return false;
1410
1411 ulong powers = 0;
1412 if(GroupMemberPowers(sogGroupID, userID, ref powers))
1413 {
1414 if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
1415 return true;
1416 }
1417
1418 return false;
1419 }
1420
1390 private bool CanEditObjectInventory(UUID objectID, UUID userID) 1421 private bool CanEditObjectInventory(UUID objectID, UUID userID)
1391 { 1422 {
1392 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); 1423 DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
@@ -2306,7 +2337,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
2306 ulong powers = 0; 2337 ulong powers = 0;
2307 if(GroupMemberPowers(sogGroupID, userID, ref powers)) 2338 if(GroupMemberPowers(sogGroupID, userID, ref powers))
2308 { 2339 {
2309 if(powers == (ulong)GroupPowers.ObjectManipulate) 2340 if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
2310 return true; 2341 return true;
2311 2342
2312 if((ti.EveryonePermissions & (uint)PermissionMask.Copy) != 0) 2343 if((ti.EveryonePermissions & (uint)PermissionMask.Copy) != 0)
diff --git a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
index c55a7a6..a75671e 100644
--- a/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
+++ b/OpenSim/Region/Framework/Scenes/Scene.Permissions.cs
@@ -53,6 +53,7 @@ namespace OpenSim.Region.Framework.Scenes
53 public delegate bool DuplicateObjectHandler(SceneObjectGroup sog, ScenePresence sp); 53 public delegate bool DuplicateObjectHandler(SceneObjectGroup sog, ScenePresence sp);
54 public delegate bool EditObjectByIDsHandler(UUID objectID, UUID editorID); 54 public delegate bool EditObjectByIDsHandler(UUID objectID, UUID editorID);
55 public delegate bool EditObjectHandler(SceneObjectGroup sog, ScenePresence sp); 55 public delegate bool EditObjectHandler(SceneObjectGroup sog, ScenePresence sp);
56 public delegate bool EditObjectPermsHandler(SceneObjectGroup sog, UUID editorID);
56 public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID); 57 public delegate bool EditObjectInventoryHandler(UUID objectID, UUID editorID);
57 public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp); 58 public delegate bool MoveObjectHandler(SceneObjectGroup sog, ScenePresence sp);
58 public delegate bool ObjectEntryHandler(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint); 59 public delegate bool ObjectEntryHandler(SceneObjectGroup sog, bool enteringRegion, Vector3 newPoint);
@@ -133,6 +134,7 @@ namespace OpenSim.Region.Framework.Scenes
133 public event DuplicateObjectHandler OnDuplicateObject; 134 public event DuplicateObjectHandler OnDuplicateObject;
134 public event EditObjectByIDsHandler OnEditObjectByIDs; 135 public event EditObjectByIDsHandler OnEditObjectByIDs;
135 public event EditObjectHandler OnEditObject; 136 public event EditObjectHandler OnEditObject;
137 public event EditObjectPermsHandler OnEditObjectPerms;
136 public event EditObjectInventoryHandler OnEditObjectInventory; 138 public event EditObjectInventoryHandler OnEditObjectInventory;
137 public event MoveObjectHandler OnMoveObject; 139 public event MoveObjectHandler OnMoveObject;
138 public event ObjectEntryHandler OnObjectEntry; 140 public event ObjectEntryHandler OnObjectEntry;
@@ -511,6 +513,24 @@ namespace OpenSim.Region.Framework.Scenes
511 return true; 513 return true;
512 } 514 }
513 515
516 public bool CanEditObjectPermissions(SceneObjectGroup sog, UUID editorID)
517 {
518 EditObjectPermsHandler handler = OnEditObjectPerms;
519 if (handler != null)
520 {
521 if(sog == null)
522 return false;
523 Delegate[] list = handler.GetInvocationList();
524 foreach (EditObjectPermsHandler h in list)
525 {
526 if (h(sog, editorID) == false)
527 return false;
528 }
529 }
530 return true;
531 }
532
533
514 public bool CanEditObjectInventory(UUID objectID, UUID editorID) 534 public bool CanEditObjectInventory(UUID objectID, UUID editorID)
515 { 535 {
516 EditObjectInventoryHandler handler = OnEditObjectInventory; 536 EditObjectInventoryHandler handler = OnEditObjectInventory;
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
index f948336..d980fe5 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectPart.cs
@@ -4460,8 +4460,11 @@ SendFullUpdateToClient(remoteClient, Position) ignores position parameter
4460 if (god) 4460 if (god)
4461 baseMask = 0x7ffffff0; 4461 baseMask = 0x7ffffff0;
4462 4462
4463 // Are we the owner? 4463 bool canChange = (AgentID == OwnerID) || god;
4464 if ((AgentID == OwnerID) || god) 4464 if(!canChange)
4465 canChange = ParentGroup.Scene.Permissions.CanEditObjectPermissions(ParentGroup, AgentID);
4466
4467 if (canChange)
4465 { 4468 {
4466 switch (field) 4469 switch (field)
4467 { 4470 {