From 9655cf280779021e6241a08f8610cad9b982763f Mon Sep 17 00:00:00 2001 From: Justin Clarke Casey Date: Mon, 5 May 2008 20:14:53 +0000 Subject: * Refactor: Break out permissions code into a separate region PermissionsModule --- OpenSim/Region/Environment/Scenes/InnerScene.cs | 42 +++++++++++----------- .../Region/Environment/Scenes/Scene.Inventory.cs | 12 +++---- .../Environment/Scenes/Scene.PacketHandlers.cs | 4 +-- OpenSim/Region/Environment/Scenes/Scene.cs | 34 +++++++++--------- OpenSim/Region/Environment/Scenes/SceneManager.cs | 2 +- .../Region/Environment/Scenes/SceneObjectGroup.cs | 2 +- OpenSim/Region/Environment/Scenes/ScenePresence.cs | 2 +- 7 files changed, 48 insertions(+), 50 deletions(-) (limited to 'OpenSim/Region/Environment/Scenes') diff --git a/OpenSim/Region/Environment/Scenes/InnerScene.cs b/OpenSim/Region/Environment/Scenes/InnerScene.cs index da286ad..f29e1f3 100644 --- a/OpenSim/Region/Environment/Scenes/InnerScene.cs +++ b/OpenSim/Region/Environment/Scenes/InnerScene.cs @@ -63,7 +63,6 @@ namespace OpenSim.Region.Environment.Scenes protected RegionInfo m_regInfo; protected Scene m_parentScene; - protected PermissionManager PermissionsMngr; protected List m_updateList = new List(); protected int m_numRootAgents = 0; protected int m_numPrim = 0; @@ -79,11 +78,10 @@ namespace OpenSim.Region.Environment.Scenes #endregion - public InnerScene(Scene parent, RegionInfo regInfo, PermissionManager permissionsMngr) + public InnerScene(Scene parent, RegionInfo regInfo) { m_parentScene = parent; m_regInfo = regInfo; - PermissionsMngr = permissionsMngr; QuadTree = new BasicQuadTreeNode(null, "/0/", 0, 0, (short)Constants.RegionSize, (short)Constants.RegionSize); QuadTree.Subdivide(); QuadTree.Subdivide(); @@ -1031,7 +1029,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) + if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) { group.Resize(scale, localID); } @@ -1042,7 +1040,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) + if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) { group.GroupResize(scale, localID); } @@ -1078,7 +1076,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) + if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) { group.UpdateSingleRotation(rot, localID); } @@ -1096,7 +1094,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) + if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) { group.UpdateGroupRotation(rot); } @@ -1115,7 +1113,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) + if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) { group.UpdateGroupRotation(pos, rot); } @@ -1128,12 +1126,12 @@ namespace OpenSim.Region.Environment.Scenes if (group != null) { LLVector3 oldPos = group.AbsolutePosition; - if (!PermissionsMngr.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment) + if (!m_parentScene.Permissions.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment) { group.SendGroupTerseUpdate(); return; } - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID) || group.RootPart.m_IsAttachment) + if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID) || group.RootPart.m_IsAttachment) { group.UpdateSinglePosition(pos, localID); } @@ -1159,12 +1157,12 @@ namespace OpenSim.Region.Environment.Scenes } else { - if (!PermissionsMngr.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment) + if (!m_parentScene.Permissions.CanObjectEntry(remoteClient.AgentId, oldPos, pos) && !group.RootPart.m_IsAttachment) { group.SendGroupTerseUpdate(); return; } - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID) || group.RootPart.m_IsAttachment) + if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID) || group.RootPart.m_IsAttachment) { group.UpdateGroupPosition(pos); } @@ -1183,7 +1181,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) + if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID)) { group.UpdateTextureEntry(localID, texture); } @@ -1201,7 +1199,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(localID); if (group != null) { - if (PermissionsMngr.CanEditObject(remoteClient.AgentId, group.UUID)) + if (m_parentScene.Permissions.CanEditObject(remoteClient.AgentId, group.UUID)) { group.UpdatePrimFlags(localID, (ushort)packet.Type, true, packet.ToBytes()); } @@ -1213,7 +1211,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(objectID); if (group != null) { - if (PermissionsMngr.CanEditObjectPosition(remoteClient.AgentId, group.UUID))// && PermissionsMngr.) + if (m_parentScene.Permissions.CanEditObjectPosition(remoteClient.AgentId, group.UUID))// && PermissionsMngr.) { group.GrabMovement(offset, pos, remoteClient); } @@ -1235,7 +1233,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(primLocalID); if (group != null) { - if (PermissionsMngr.CanEditObject(remoteClient.AgentId, group.UUID)) + if (m_parentScene.Permissions.CanEditObject(remoteClient.AgentId, group.UUID)) { group.SetPartName(Util.CleanString(name), primLocalID); } @@ -1252,7 +1250,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(primLocalID); if (group != null) { - if (PermissionsMngr.CanEditObject(remoteClient.AgentId, group.UUID)) + if (m_parentScene.Permissions.CanEditObject(remoteClient.AgentId, group.UUID)) { group.SetPartDescription(Util.CleanString(description), primLocalID); } @@ -1265,7 +1263,7 @@ namespace OpenSim.Region.Environment.Scenes if (group != null) { - if (PermissionsMngr.CanEditObject(agentID, group.UUID)) + if (m_parentScene.Permissions.CanEditObject(agentID, group.UUID)) { group.UpdateExtraParam(primLocalID, type, inUse, data); } @@ -1282,7 +1280,7 @@ namespace OpenSim.Region.Environment.Scenes SceneObjectGroup group = GetGroupByPrim(primLocalID); if (group != null) { - if (PermissionsMngr.CanEditObjectPosition(agentID, group.GetPartsFullID(primLocalID))) + if (m_parentScene.Permissions.CanEditObjectPosition(agentID, group.GetPartsFullID(primLocalID))) { group.UpdateShape(shapeBlock, primLocalID); } @@ -1448,11 +1446,11 @@ namespace OpenSim.Region.Environment.Scenes // * Asset/DRM permission bit "modify" is enabled //use CanEditObjectPosition - if (IncludeInSearch && PermissionsMngr.CanEditObject(user, objid)) + if (IncludeInSearch && m_parentScene.Permissions.CanEditObject(user, objid)) { obj.AddFlag(LLObject.ObjectFlags.JointWheel); } - else if (!IncludeInSearch && PermissionsMngr.CanEditObjectPosition(user, objid)) + else if (!IncludeInSearch && m_parentScene.Permissions.CanEditObjectPosition(user, objid)) { obj.RemFlag(LLObject.ObjectFlags.JointWheel); } @@ -1485,7 +1483,7 @@ namespace OpenSim.Region.Environment.Scenes if (originPrim != null) { - if (PermissionsMngr.CanCopyObject(AgentID, originPrim.UUID)) + if (m_parentScene.Permissions.CanCopyObject(AgentID, originPrim.UUID)) { SceneObjectGroup copy = originPrim.Copy(AgentID, GroupID); copy.AbsolutePosition = copy.AbsolutePosition + offset; diff --git a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs index ee52a66..65e6fd8 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs @@ -73,7 +73,7 @@ namespace OpenSim.Region.Environment.Scenes remoteClient.SendInventoryItemCreateUpdate(item); int userlevel = 0; - if (PermissionsMngr.IsEstateManager(remoteClient.AgentId)) + if (Permissions.IsEstateManager(remoteClient.AgentId)) { userlevel = 1; } @@ -784,7 +784,7 @@ namespace OpenSim.Region.Environment.Scenes } // bool permission; -// permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId, +// permission = Permissions.CanCopyObject(remoteClient.AgentId, // ((SceneObjectGroup) selectedEnt).UUID); // Pending resolving upstream problems with permissions, we just won't allow anybody who is not the owner @@ -988,12 +988,12 @@ namespace OpenSim.Region.Environment.Scenes bool permission; if (DeRezPacket.AgentBlock.Destination == 1) { // Take Copy - permission = PermissionsMngr.CanCopyObject(remoteClient.AgentId, + permission = Permissions.CanCopyObject(remoteClient.AgentId, ((SceneObjectGroup) selectedEnt).UUID); } else { // Take - permission = PermissionsMngr.CanDeRezObject(remoteClient.AgentId, + permission = Permissions.CanDeRezObject(remoteClient.AgentId, ((SceneObjectGroup) selectedEnt).UUID); } @@ -1267,7 +1267,7 @@ namespace OpenSim.Region.Environment.Scenes RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), BypassRayCast, bRayEndIsIntersection,true,scale, false); - if (!PermissionsMngr.CanRezObject(remoteClient.AgentId, pos) && !attachment) + if (!Permissions.CanRezObject(remoteClient.AgentId, pos) && !attachment) { return null; } @@ -1361,7 +1361,7 @@ namespace OpenSim.Region.Environment.Scenes { LLUUID ownerID = item.OwnerID; - if (!PermissionsMngr.CanRezObject(ownerID, pos)) + if (!Permissions.CanRezObject(ownerID, pos)) { return null; } diff --git a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs index b4a581d..350990e 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.PacketHandlers.cs @@ -85,7 +85,7 @@ namespace OpenSim.Region.Environment.Scenes if (((SceneObjectGroup) ent).LocalId == primLocalID) { // A prim is only tainted if it's allowed to be edited by the person clicking it. - if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || m_permissionManager.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID)) + if (Permissions.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || Permissions.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID)) { ((SceneObjectGroup) ent).GetProperties(remoteClient); ((SceneObjectGroup) ent).IsSelected = true; @@ -112,7 +112,7 @@ namespace OpenSim.Region.Environment.Scenes { if (((SceneObjectGroup) ent).LocalId == primLocalID) { - if (m_permissionManager.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || m_permissionManager.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID)) + if (Permissions.CanEditObjectPosition(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID) || Permissions.CanEditObject(remoteClient.AgentId, ((SceneObjectGroup)ent).UUID)) { ((SceneObjectGroup) ent).IsSelected = false; LandChannel.setPrimsTainted(); diff --git a/OpenSim/Region/Environment/Scenes/Scene.cs b/OpenSim/Region/Environment/Scenes/Scene.cs index f861361..a703622 100644 --- a/OpenSim/Region/Environment/Scenes/Scene.cs +++ b/OpenSim/Region/Environment/Scenes/Scene.cs @@ -114,6 +114,7 @@ namespace OpenSim.Region.Environment.Scenes protected IXMLRPC m_xmlrpcModule; protected IWorldComm m_worldCommModule; protected IAvatarFactory m_AvatarFactory; + protected IScenePermissions m_permissions; // Central Update Loop @@ -169,13 +170,12 @@ namespace OpenSim.Region.Environment.Scenes get { return m_timedilation; } } - protected readonly PermissionManager m_permissionManager; - // This is the instance to the permissions manager. - // This manages permissions to clients on in world objects - - public PermissionManager PermissionsMngr + /// + /// The reference by which general permissions in the scene can be set and queried. + /// + public IScenePermissions Permissions { - get { return m_permissionManager; } + get { return m_permissions; } } public int TimePhase @@ -219,7 +219,7 @@ namespace OpenSim.Region.Environment.Scenes #region Constructors - public Scene(RegionInfo regInfo, AgentCircuitManager authen, PermissionManager permissionManager, + public Scene(RegionInfo regInfo, AgentCircuitManager authen, CommunicationsManager commsMan, SceneCommunicationService sceneGridService, AssetCache assetCach, StorageManager storeManager, BaseHttpServer httpServer, ModuleLoader moduleLoader, bool dumpAssetsToFile, bool physicalPrim, bool SeeIntoRegionFromNeighbor) @@ -248,10 +248,7 @@ namespace OpenSim.Region.Environment.Scenes EventManager.OnLandObjectRemoved += new EventManager.LandObjectRemoved(m_storageManager.DataStore.RemoveLandObject); - m_permissionManager = permissionManager; - m_permissionManager.Initialise(this); - - m_innerScene = new InnerScene(this, m_regInfo, m_permissionManager); + m_innerScene = new InnerScene(this, m_regInfo); // If the Inner scene has an Unrecoverable error, restart this sim. // Currently the only thing that causes it to happen is two kinds of specific @@ -613,6 +610,9 @@ namespace OpenSim.Region.Environment.Scenes m_heartbeatTimer.Elapsed += new ElapsedEventHandler(Heartbeat); } + /// + /// Sets up references to loaded modules required by thie scene + /// public void SetModuleInterfaces() { m_simChatModule = RequestModuleInterface(); @@ -621,6 +621,7 @@ namespace OpenSim.Region.Environment.Scenes m_worldCommModule = RequestModuleInterface(); XferManager = RequestModuleInterface(); m_AvatarFactory = RequestModuleInterface(); + m_permissions = RequestModuleInterface(); } #endregion @@ -1121,7 +1122,7 @@ namespace OpenSim.Region.Environment.Scenes /// /// Loads the World's objects /// - public virtual void LoadPrimsFromStorage(bool m_permissions, LLUUID regionID) + public virtual void LoadPrimsFromStorage(LLUUID regionID) { m_log.Info("[SCENE]: Loading objects from datastore"); @@ -1243,12 +1244,11 @@ namespace OpenSim.Region.Environment.Scenes LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new LLVector3(0.5f,0.5f,0.5f), false); - if (PermissionsMngr.CanRezObject(ownerID, pos)) + if (Permissions.CanRezObject(ownerID, pos)) { // rez ON the ground, not IN the ground pos.Z += 0.25F; - AddNewPrim(ownerID, pos, rot, shape); } } @@ -2499,7 +2499,7 @@ namespace OpenSim.Region.Environment.Scenes IClientAPI controllingClient) { // First check that this is the sim owner - if (m_permissionManager.GenericEstatePermission(agentID)) + if (Permissions.GenericEstatePermission(agentID)) { // User needs to be logged into this sim if (m_scenePresences.ContainsKey(agentID)) @@ -2577,7 +2577,7 @@ namespace OpenSim.Region.Environment.Scenes LLUUID kickUserID = new LLUUID("44e87126e7944ded05b37c42da3d5cdb"); if (m_scenePresences.ContainsKey(agentID) || agentID == kickUserID) { - if (m_permissionManager.GenericEstatePermission(godID)) + if (Permissions.GenericEstatePermission(godID)) { if (agentID == kickUserID) { @@ -2896,7 +2896,7 @@ namespace OpenSim.Region.Environment.Scenes } else if ((parcel.landData.landFlags & (uint)Parcel.ParcelFlags.AllowGroupScripts) != 0) { - if (part.OwnerID == parcel.landData.ownerID || (parcel.landData.isGroupOwned && part.GroupID == parcel.landData.groupID) || PermissionsMngr.GenericEstatePermission(part.OwnerID)) + if (part.OwnerID == parcel.landData.ownerID || (parcel.landData.isGroupOwned && part.GroupID == parcel.landData.groupID) || Permissions.GenericEstatePermission(part.OwnerID)) { return true; } diff --git a/OpenSim/Region/Environment/Scenes/SceneManager.cs b/OpenSim/Region/Environment/Scenes/SceneManager.cs index 2dfea2a..8603ccc 100644 --- a/OpenSim/Region/Environment/Scenes/SceneManager.cs +++ b/OpenSim/Region/Environment/Scenes/SceneManager.cs @@ -191,7 +191,7 @@ namespace OpenSim.Region.Environment.Scenes public void SetBypassPermissionsOnCurrentScene(bool bypassPermissions) { - ForEachCurrentScene(delegate(Scene scene) { scene.PermissionsMngr.BypassPermissions = bypassPermissions; }); + ForEachCurrentScene(delegate(Scene scene) { scene.Permissions.BypassPermissions = bypassPermissions; }); } private void ForEachCurrentScene(Action func) diff --git a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs index 9ed5990..2e44c54 100644 --- a/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs +++ b/OpenSim/Region/Environment/Scenes/SceneObjectGroup.cs @@ -1340,7 +1340,7 @@ namespace OpenSim.Region.Environment.Scenes if (part.OwnerID != cAgentID) { // Apply Next Owner Permissions if we're not bypassing permissions - if (!m_scene.PermissionsMngr.BypassPermissions) + if (!m_scene.Permissions.BypassPermissions) m_rootPart.ApplyNextOwnerPermissions(); } diff --git a/OpenSim/Region/Environment/Scenes/ScenePresence.cs b/OpenSim/Region/Environment/Scenes/ScenePresence.cs index 453c18f..fcd93d8 100644 --- a/OpenSim/Region/Environment/Scenes/ScenePresence.cs +++ b/OpenSim/Region/Environment/Scenes/ScenePresence.cs @@ -451,7 +451,7 @@ namespace OpenSim.Region.Environment.Scenes public uint GenerateClientFlags(LLUUID ObjectID) { - return m_scene.PermissionsMngr.GenerateClientFlags(m_uuid, ObjectID); + return m_scene.Permissions.GenerateClientFlags(m_uuid, ObjectID); } /// -- cgit v1.1