[Opensim-dev] [Opensim-commits] r4554 - in trunk/OpenSim/Region: ClientStack/LindenUDP Environment/Interfaces Environment/Modules/World/Permissions Environment/Scenes

Justin Clark-Casey jjustincc at googlemail.com
Wed May 7 19:38:58 UTC 2008


Hi MingChen,

Couldn't these external check hooks be added directly into the 
PermissionsModule, rather than having the scene call the module, only 
for the module to call back into the scene?


mingchen at opensimulator.org wrote:
> Author: mingchen
> Date: 2008-05-07 10:33:57 -0700 (Wed, 07 May 2008)
> New Revision: 4554
> 
> Modified:
>    trunk/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
>    trunk/OpenSim/Region/Environment/Interfaces/IScenePermissions.cs
>    trunk/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs
>    trunk/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
>    trunk/OpenSim/Region/Environment/Scenes/Scene.cs
>    trunk/OpenSim/Region/Environment/Scenes/SceneBase.cs
> Log:
> *Added SceneExternalChecks.cs that is used to manage checking the results of multiple functions that register with the class and return the result (usually true/false) based on those results. This is useful for module wanting to put their opinion in decisions such as 'can the user rez this object?'
> 
> Modified: trunk/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs
> ===================================================================
> --- trunk/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs	2008-05-07 16:48:29 UTC (rev 4553)
> +++ trunk/OpenSim/Region/ClientStack/LindenUDP/LLClientView.cs	2008-05-07 17:33:57 UTC (rev 4554)
> @@ -4047,6 +4047,9 @@
>                              //RayEnd: <61.97724, 141.995, 92.58341>   
>                              //RayTargetID: 00000000-0000-0000-0000-000000000000
>  
> +                            //Check to see if adding the prim is allowed; useful for any module wanting to restrict the
> +                            //object from rezing initially
> +                            
>                              handlerAddPrim = OnAddPrim;
>                              if (handlerAddPrim != null)
>                                  handlerAddPrim(AgentId, addPacket.ObjectData.RayEnd, addPacket.ObjectData.Rotation, shape, addPacket.ObjectData.BypassRaycast, addPacket.ObjectData.RayStart, addPacket.ObjectData.RayTargetID, addPacket.ObjectData.RayEndIsIntersection);
> 
> Modified: trunk/OpenSim/Region/Environment/Interfaces/IScenePermissions.cs
> ===================================================================
> --- trunk/OpenSim/Region/Environment/Interfaces/IScenePermissions.cs	2008-05-07 16:48:29 UTC (rev 4553)
> +++ trunk/OpenSim/Region/Environment/Interfaces/IScenePermissions.cs	2008-05-07 17:33:57 UTC (rev 4554)
> @@ -34,9 +34,9 @@
>          bool BypassPermissions { get; set; }
>  
>          #region Object Permissions
> +
> +        bool CanRezObject(LLUUID user, LLVector3 position, int count);
>          
> -        bool CanRezObject(LLUUID user, LLVector3 position);
> -        
>          /// <summary>
>          /// Permissions check - can user delete an object?
>          /// </summary>
> 
> Modified: trunk/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs
> ===================================================================
> --- trunk/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs	2008-05-07 16:48:29 UTC (rev 4553)
> +++ trunk/OpenSim/Region/Environment/Modules/World/Permissions/PermissionsModule.cs	2008-05-07 17:33:57 UTC (rev 4554)
> @@ -140,12 +140,21 @@
>              return false;
>          }
>  
> -        public virtual bool CanRezObject(LLUUID user, LLVector3 position)
> +        public virtual bool CanRezObject(LLUUID user, LLVector3 position, int objectCount)
>          {
>              bool permission = false;
>  
> +            
> +
>              string reason = "Insufficient permission";
>  
> +            //Perform ExternalChecks first!
> +            bool results = m_scene.ExternalChecks.ExternalChecksCanRezObject(objectCount, user, position);
> +            if (results == false)
> +            {
> +                return false;
> +            }
> +
>              ILandObject land = m_scene.LandChannel.GetLandObject(position.X, position.Y);
>              if (land == null) return false;
>  
> 
> Modified: trunk/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs
> ===================================================================
> --- trunk/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs	2008-05-07 16:48:29 UTC (rev 4553)
> +++ trunk/OpenSim/Region/Environment/Scenes/Scene.Inventory.cs	2008-05-07 17:33:57 UTC (rev 4554)
> @@ -1267,10 +1267,7 @@
>                        RayStart, RayEnd, RayTargetID, new LLQuaternion(0, 0, 0, 1), 
>                        BypassRayCast, bRayEndIsIntersection,true,scale, false);
>              
> -            if (!Permissions.CanRezObject(remoteClient.AgentId, pos) && !attachment)
> -            {
> -                return null;         
> -            }
> +            
>  
>              // Rez object
>              CachedUserInfo userInfo = CommsManager.UserProfileCacheService.GetUserDetails(remoteClient.AgentId);
> @@ -1288,6 +1285,11 @@
>                          {
>                              string xmlData = Helpers.FieldToUTF8String(rezAsset.Data);                            
>                              SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData);
> +                            if (!Permissions.CanRezObject(remoteClient.AgentId, pos, group.Children.Count) && !attachment)
> +                            {
> +                                return null;
> +                            }
> +
>                              group.ResetIDs();
>                              AddEntity(group);
>  
> @@ -1361,10 +1363,6 @@
>              {
>                  LLUUID ownerID = item.OwnerID;
>  
> -                if (!Permissions.CanRezObject(ownerID, pos))
> -                {
> -                    return null;
> -                }
>  
>                  AssetBase rezAsset = AssetCache.GetAsset(item.AssetID, false);
>  
> @@ -1372,6 +1370,11 @@
>                  {
>                      string xmlData = Helpers.FieldToUTF8String(rezAsset.Data);
>                      SceneObjectGroup group = new SceneObjectGroup(this, m_regionHandle, xmlData);
> +
> +                    if (!Permissions.CanRezObject(ownerID, pos, group.Children.Count))
> +                    {
> +                        return null;
> +                    }
>                      group.ResetIDs();
>                      AddEntity(group);
>  
> 
> Modified: trunk/OpenSim/Region/Environment/Scenes/Scene.cs
> ===================================================================
> --- trunk/OpenSim/Region/Environment/Scenes/Scene.cs	2008-05-07 16:48:29 UTC (rev 4553)
> +++ trunk/OpenSim/Region/Environment/Scenes/Scene.cs	2008-05-07 17:33:57 UTC (rev 4554)
> @@ -241,6 +241,7 @@
>              m_seeIntoRegionFromNeighbor = SeeIntoRegionFromNeighbor;
>  
>              m_eventManager = new EventManager();
> +            m_externalChecks = new SceneExternalChecks(this);
>  
>              //Bind Storage Manager functions to some land manager functions for this scene
>              EventManager.OnLandObjectAdded +=
> @@ -829,7 +830,7 @@
>          {
>              ForEachScenePresence(delegate(ScenePresence presence) { whatToDo(presence.ControllingClient); });
>          }
> -
> +         
>          /// <summary>
>          /// 
>          /// </summary>
> @@ -1244,7 +1245,7 @@
>             
>              LLVector3 pos = GetNewRezLocation(RayStart, RayEnd, RayTargetID, rot, bypassRaycast, RayEndIsIntersection, true, new LLVector3(0.5f,0.5f,0.5f), false);
>  
> -            if (Permissions.CanRezObject(ownerID, pos))
> +            if (Permissions.CanRezObject(ownerID, pos, 1))
>              {
>                  // rez ON the ground, not IN the ground
>                  pos.Z += 0.25F;
> @@ -3217,5 +3218,7 @@
>              return visualParams;
>          }
>          #endregion
> +
> +
>      }
>  }
> 
> Modified: trunk/OpenSim/Region/Environment/Scenes/SceneBase.cs
> ===================================================================
> --- trunk/OpenSim/Region/Environment/Scenes/SceneBase.cs	2008-05-07 16:48:29 UTC (rev 4553)
> +++ trunk/OpenSim/Region/Environment/Scenes/SceneBase.cs	2008-05-07 17:33:57 UTC (rev 4554)
> @@ -71,6 +71,12 @@
>              get { return m_eventManager; }
>          }
>  
> +
> +        protected SceneExternalChecks m_externalChecks;
> +        public SceneExternalChecks ExternalChecks
> +        {
> +            get { return m_externalChecks; }
> +        }
>          
>          protected string m_datastore;
>  
> 
> _______________________________________________
> Opensim-commits mailing list
> Opensim-commits at lists.berlios.de
> https://lists.berlios.de/mailman/listinfo/opensim-commits
> 


-- 
justincc
Justin Clark-Casey
http://justincc.wordpress.com



More information about the Opensim-dev mailing list