diff options
author | Melanie | 2010-03-18 18:57:29 +0000 |
---|---|---|
committer | Melanie | 2010-03-18 18:58:37 +0000 |
commit | f35eb8819c6a872e7c4727940ffc560f7d5d68bd (patch) | |
tree | 3b71a9aa31991d5b9b5c05ecc648d7d055f960c1 /OpenSim/Region/CoreModules | |
parent | Merge branch 'master' of ssh://3dhosting.de/var/git/careminster (diff) | |
download | opensim-SC_OLD-f35eb8819c6a872e7c4727940ffc560f7d5d68bd.zip opensim-SC_OLD-f35eb8819c6a872e7c4727940ffc560f7d5d68bd.tar.gz opensim-SC_OLD-f35eb8819c6a872e7c4727940ffc560f7d5d68bd.tar.bz2 opensim-SC_OLD-f35eb8819c6a872e7c4727940ffc560f7d5d68bd.tar.xz |
Unify a previous refactor of object return with the older solution. We
really don't need two methods doing the same thing, but differently.
Diffstat (limited to 'OpenSim/Region/CoreModules')
-rw-r--r-- | OpenSim/Region/CoreModules/World/Land/LandObject.cs | 2 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | 71 |
2 files changed, 7 insertions, 66 deletions
diff --git a/OpenSim/Region/CoreModules/World/Land/LandObject.cs b/OpenSim/Region/CoreModules/World/Land/LandObject.cs index 1c65965..b8c35f7 100644 --- a/OpenSim/Region/CoreModules/World/Land/LandObject.cs +++ b/OpenSim/Region/CoreModules/World/Land/LandObject.cs | |||
@@ -915,7 +915,7 @@ namespace OpenSim.Region.CoreModules.World.Land | |||
915 | 915 | ||
916 | foreach (List<SceneObjectGroup> ol in returns.Values) | 916 | foreach (List<SceneObjectGroup> ol in returns.Values) |
917 | { | 917 | { |
918 | if (m_scene.Permissions.CanUseObjectReturn(this, type, remote_client, ol)) | 918 | if (m_scene.Permissions.CanReturnObjects(this, remote_client.AgentId, ol)) |
919 | m_scene.returnObjects(ol.ToArray(), remote_client.AgentId); | 919 | m_scene.returnObjects(ol.ToArray(), remote_client.AgentId); |
920 | } | 920 | } |
921 | } | 921 | } |
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index 1533462..7159dc6 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -200,7 +200,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
200 | m_scene.Permissions.OnIssueEstateCommand += CanIssueEstateCommand; //FULLY IMPLEMENTED | 200 | m_scene.Permissions.OnIssueEstateCommand += CanIssueEstateCommand; //FULLY IMPLEMENTED |
201 | m_scene.Permissions.OnMoveObject += CanMoveObject; //MAYBE FULLY IMPLEMENTED | 201 | m_scene.Permissions.OnMoveObject += CanMoveObject; //MAYBE FULLY IMPLEMENTED |
202 | m_scene.Permissions.OnObjectEntry += CanObjectEntry; | 202 | m_scene.Permissions.OnObjectEntry += CanObjectEntry; |
203 | m_scene.Permissions.OnReturnObject += CanReturnObject; //NOT YET IMPLEMENTED | 203 | m_scene.Permissions.OnReturnObjects += CanReturnObjects; //NOT YET IMPLEMENTED |
204 | m_scene.Permissions.OnRezObject += CanRezObject; //MAYBE FULLY IMPLEMENTED | 204 | m_scene.Permissions.OnRezObject += CanRezObject; //MAYBE FULLY IMPLEMENTED |
205 | m_scene.Permissions.OnRunConsoleCommand += CanRunConsoleCommand; | 205 | m_scene.Permissions.OnRunConsoleCommand += CanRunConsoleCommand; |
206 | m_scene.Permissions.OnRunScript += CanRunScript; //NOT YET IMPLEMENTED | 206 | m_scene.Permissions.OnRunScript += CanRunScript; //NOT YET IMPLEMENTED |
@@ -230,7 +230,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
230 | m_scene.Permissions.OnDeleteUserInventory += CanDeleteUserInventory; //NOT YET IMPLEMENTED | 230 | m_scene.Permissions.OnDeleteUserInventory += CanDeleteUserInventory; //NOT YET IMPLEMENTED |
231 | 231 | ||
232 | m_scene.Permissions.OnTeleport += CanTeleport; //NOT YET IMPLEMENTED | 232 | m_scene.Permissions.OnTeleport += CanTeleport; //NOT YET IMPLEMENTED |
233 | m_scene.Permissions.OnUseObjectReturn += CanUseObjectReturn; //NOT YET IMPLEMENTED | ||
234 | 233 | ||
235 | m_scene.AddCommand(this, "bypass permissions", | 234 | m_scene.AddCommand(this, "bypass permissions", |
236 | "bypass permissions <true / false>", | 235 | "bypass permissions <true / false>", |
@@ -1258,12 +1257,15 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1258 | return false; | 1257 | return false; |
1259 | } | 1258 | } |
1260 | 1259 | ||
1261 | private bool CanReturnObject(UUID objectID, UUID returnerID, Scene scene) | 1260 | private bool CanReturnObjects(ILandObject land, UUID user, List<SceneObjectGroup> objects, Scene scene) |
1262 | { | 1261 | { |
1262 | if (objects.Count == 0) | ||
1263 | return false; | ||
1264 | |||
1263 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | 1265 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); |
1264 | if (m_bypassPermissions) return m_bypassPermissionsValue; | 1266 | if (m_bypassPermissions) return m_bypassPermissionsValue; |
1265 | 1267 | ||
1266 | return GenericObjectPermission(returnerID, objectID, false); | 1268 | return GenericObjectPermission(user, objects[0].UUID, false); |
1267 | } | 1269 | } |
1268 | 1270 | ||
1269 | private bool CanRezObject(int objectCount, UUID owner, Vector3 objectPosition, Scene scene) | 1271 | private bool CanRezObject(int objectCount, UUID owner, Vector3 objectPosition, Scene scene) |
@@ -1730,67 +1732,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
1730 | return GenericObjectPermission(agentID, prim, false); | 1732 | return GenericObjectPermission(agentID, prim, false); |
1731 | } | 1733 | } |
1732 | 1734 | ||
1733 | private bool CanUseObjectReturn(ILandObject parcel, uint type, IClientAPI client, List<SceneObjectGroup> retlist, Scene scene) | ||
1734 | { | ||
1735 | DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name); | ||
1736 | if (m_bypassPermissions) return m_bypassPermissionsValue; | ||
1737 | |||
1738 | long powers = 0; | ||
1739 | if (parcel.LandData.GroupID != UUID.Zero) | ||
1740 | client.GetGroupPowers(parcel.LandData.GroupID); | ||
1741 | |||
1742 | switch (type) | ||
1743 | { | ||
1744 | case (uint)ObjectReturnType.Owner: | ||
1745 | // Don't let group members return owner's objects, ever | ||
1746 | // | ||
1747 | if (parcel.LandData.IsGroupOwned) | ||
1748 | { | ||
1749 | if ((powers & (long)GroupPowers.ReturnGroupOwned) != 0) | ||
1750 | return true; | ||
1751 | } | ||
1752 | else | ||
1753 | { | ||
1754 | if (parcel.LandData.OwnerID != client.AgentId) | ||
1755 | return false; | ||
1756 | } | ||
1757 | return GenericParcelOwnerPermission(client.AgentId, parcel, (ulong)GroupPowers.ReturnGroupOwned); | ||
1758 | case (uint)ObjectReturnType.Group: | ||
1759 | if (parcel.LandData.OwnerID != client.AgentId) | ||
1760 | { | ||
1761 | // If permissionis granted through a group... | ||
1762 | // | ||
1763 | if ((powers & (long)GroupPowers.ReturnGroupSet) != 0) | ||
1764 | { | ||
1765 | foreach (SceneObjectGroup g in new List<SceneObjectGroup>(retlist)) | ||
1766 | { | ||
1767 | // check for and remove group owned objects unless | ||
1768 | // the user also has permissions to return those | ||
1769 | // | ||
1770 | if (g.OwnerID == g.GroupID && | ||
1771 | ((powers & (long)GroupPowers.ReturnGroupOwned) == 0)) | ||
1772 | { | ||
1773 | retlist.Remove(g); | ||
1774 | } | ||
1775 | } | ||
1776 | // And allow the operation | ||
1777 | // | ||
1778 | return true; | ||
1779 | } | ||
1780 | } | ||
1781 | return GenericParcelOwnerPermission(client.AgentId, parcel, (ulong)GroupPowers.ReturnGroupSet); | ||
1782 | case (uint)ObjectReturnType.Other: | ||
1783 | if ((powers & (long)GroupPowers.ReturnNonGroup) != 0) | ||
1784 | return true; | ||
1785 | return GenericParcelOwnerPermission(client.AgentId, parcel, (ulong)GroupPowers.ReturnNonGroup); | ||
1786 | case (uint)ObjectReturnType.List: | ||
1787 | break; | ||
1788 | } | ||
1789 | |||
1790 | return GenericParcelOwnerPermission(client.AgentId, parcel, 0); | ||
1791 | // Is it correct to be less restrictive for lists of objects to be returned? | ||
1792 | } | ||
1793 | |||
1794 | private bool CanCompileScript(UUID ownerUUID, int scriptType, Scene scene) { | 1735 | private bool CanCompileScript(UUID ownerUUID, int scriptType, Scene scene) { |
1795 | //m_log.DebugFormat("check if {0} is allowed to compile {1}", ownerUUID, scriptType); | 1736 | //m_log.DebugFormat("check if {0} is allowed to compile {1}", ownerUUID, scriptType); |
1796 | switch (scriptType) { | 1737 | switch (scriptType) { |