Simple build permissions feature. NOTE: EXPERIMENTAL, DISABLED BY DEFAULT. Turns out that this can't be expressed by cascading Permission modules, so I did it as per this patch.
parent
a8c87bab64
commit
6146e7ef25
|
@ -63,6 +63,7 @@ namespace OpenSim.Framework
|
|||
bool ContainsPoint(int x, int y);
|
||||
|
||||
ILandObject Copy();
|
||||
ILandObject MemberwiseCopy();
|
||||
|
||||
void SendLandUpdateToAvatarsOverMe();
|
||||
|
||||
|
@ -70,6 +71,7 @@ namespace OpenSim.Framework
|
|||
void UpdateLandProperties(LandUpdateArgs args, IClientAPI remote_client);
|
||||
bool IsEitherBannedOrRestricted(UUID avatar);
|
||||
bool IsBannedFromLand(UUID avatar);
|
||||
bool IsAllowedInLand(UUID avatar);
|
||||
bool IsRestrictedFromLand(UUID avatar);
|
||||
void SendLandUpdateToClient(IClientAPI remote_client);
|
||||
void SendLandUpdateToClient(bool snap_selection, IClientAPI remote_client);
|
||||
|
|
|
@ -169,6 +169,11 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
return newLand;
|
||||
}
|
||||
|
||||
public ILandObject MemberwiseCopy()
|
||||
{
|
||||
return (ILandObject)this.MemberwiseClone();
|
||||
}
|
||||
|
||||
static overrideParcelMaxPrimCountDelegate overrideParcelMaxPrimCount;
|
||||
static overrideSimulatorMaxPrimCountDelegate overrideSimulatorMaxPrimCount;
|
||||
|
||||
|
@ -242,11 +247,13 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
m_lastSeqId = seq_id;
|
||||
}
|
||||
|
||||
ILandObject landToSend = this;
|
||||
m_scene.Permissions.LandObjectForClient(remote_client.AgentId, (ILandObject)this, out landToSend);
|
||||
remote_client.SendLandProperties(seq_id,
|
||||
snap_selection, request_result, this,
|
||||
(float)m_scene.RegionInfo.RegionSettings.ObjectBonus,
|
||||
GetParcelMaxPrimCount(),
|
||||
GetSimulatorMaxPrimCount(), regionFlags);
|
||||
snap_selection, request_result, landToSend,
|
||||
(float)m_scene.RegionInfo.RegionSettings.ObjectBonus,
|
||||
GetParcelMaxPrimCount(),
|
||||
GetSimulatorMaxPrimCount(), regionFlags);
|
||||
}
|
||||
|
||||
public void UpdateLandProperties(LandUpdateArgs args, IClientAPI remote_client)
|
||||
|
@ -475,6 +482,32 @@ namespace OpenSim.Region.CoreModules.World.Land
|
|||
return false;
|
||||
}
|
||||
|
||||
public bool IsAllowedInLand(UUID avatar)
|
||||
{
|
||||
ExpireAccessList();
|
||||
|
||||
if (m_scene.Permissions.IsAdministrator(avatar))
|
||||
return true;
|
||||
|
||||
if (m_scene.RegionInfo.EstateSettings.IsEstateManager(avatar))
|
||||
return true;
|
||||
|
||||
if (avatar == LandData.OwnerID)
|
||||
return true;
|
||||
|
||||
if (LandData.ParcelAccessList.FindIndex(
|
||||
delegate(LandAccessEntry e)
|
||||
{
|
||||
if (e.AgentID == avatar && e.Flags == AccessList.Access)
|
||||
return true;
|
||||
return false;
|
||||
}) != -1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public void SendLandUpdateToClient(IClientAPI remote_client)
|
||||
{
|
||||
SendLandProperties(0, false, 0, remote_client);
|
||||
|
|
|
@ -94,7 +94,9 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
private bool m_RegionOwnerIsGod = false;
|
||||
private bool m_RegionManagerIsGod = false;
|
||||
private bool m_ParcelOwnerIsGod = false;
|
||||
|
||||
|
||||
private bool m_SimpleBuildPermissions = false;
|
||||
|
||||
/// <value>
|
||||
/// The set of users that are allowed to create scripts. This is only active if permissions are not being
|
||||
/// bypassed. This overrides normal permissions.
|
||||
|
@ -139,7 +141,9 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
m_RegionOwnerIsGod = myConfig.GetBoolean("region_owner_is_god", true);
|
||||
m_RegionManagerIsGod = myConfig.GetBoolean("region_manager_is_god", false);
|
||||
m_ParcelOwnerIsGod = myConfig.GetBoolean("parcel_owner_is_god", true);
|
||||
|
||||
|
||||
m_SimpleBuildPermissions = myConfig.GetBoolean("simple_build_permissions", false);
|
||||
|
||||
m_allowedScriptCreators
|
||||
= ParseUserSetConfigSetting(myConfig, "allowed_script_creators", m_allowedScriptCreators);
|
||||
m_allowedScriptEditors
|
||||
|
@ -206,6 +210,9 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
m_scene.Permissions.OnControlPrimMedia += CanControlPrimMedia;
|
||||
m_scene.Permissions.OnInteractWithPrimMedia += CanInteractWithPrimMedia;
|
||||
|
||||
if (m_SimpleBuildPermissions)
|
||||
m_scene.Permissions.OnSendLandProperties += GenerateLandProperties;
|
||||
|
||||
m_scene.AddCommand("Users", this, "bypass permissions",
|
||||
"bypass permissions <true / false>",
|
||||
"Bypass permission checks",
|
||||
|
@ -824,6 +831,10 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
permission = true;
|
||||
}
|
||||
|
||||
if (m_SimpleBuildPermissions &&
|
||||
(parcel.LandData.Flags & (uint)ParcelFlags.UseAccessList) == 0 && parcel.IsAllowedInLand(user))
|
||||
permission = true;
|
||||
|
||||
return permission;
|
||||
}
|
||||
|
||||
|
@ -1966,5 +1977,24 @@ namespace OpenSim.Region.CoreModules.World.Permissions
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
private void GenerateLandProperties(UUID userID, ILandObject realLand, out ILandObject landToSend)
|
||||
{
|
||||
landToSend = realLand;
|
||||
if (m_bypassPermissions) return;
|
||||
|
||||
if (m_SimpleBuildPermissions &&
|
||||
!m_scene.Permissions.IsAdministrator(userID) &&
|
||||
!realLand.LandData.OwnerID.Equals(userID) &&
|
||||
((realLand.LandData.Flags & (uint)ParcelFlags.UseAccessList) == 0 && realLand.IsAllowedInLand(userID)))
|
||||
{
|
||||
ILandObject clone = realLand.MemberwiseCopy();
|
||||
LandData ldata = realLand.LandData.Copy();
|
||||
clone.LandData = ldata;
|
||||
clone.LandData.Flags |= (uint)(ParcelFlags.AllowAPrimitiveEntry | ParcelFlags.AllowFly | ParcelFlags.AllowOtherScripts | ParcelFlags.CreateObjects);
|
||||
landToSend = clone;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,6 +90,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public delegate bool TeleportHandler(UUID userID, Scene scene);
|
||||
public delegate bool ControlPrimMediaHandler(UUID userID, UUID primID, int face);
|
||||
public delegate bool InteractWithPrimMediaHandler(UUID userID, UUID primID, int face);
|
||||
public delegate void SendLandPropertiesHandler(UUID userID, ILandObject realLand, out ILandObject landToSend);
|
||||
#endregion
|
||||
|
||||
public class ScenePermissions
|
||||
|
@ -157,6 +158,7 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
public event TeleportHandler OnTeleport;
|
||||
public event ControlPrimMediaHandler OnControlPrimMedia;
|
||||
public event InteractWithPrimMediaHandler OnInteractWithPrimMedia;
|
||||
public event SendLandPropertiesHandler OnSendLandProperties;
|
||||
#endregion
|
||||
|
||||
#region Object Permission Checks
|
||||
|
@ -1098,5 +1100,20 @@ namespace OpenSim.Region.Framework.Scenes
|
|||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public void LandObjectForClient(UUID userID, ILandObject realLand, out ILandObject landToSend)
|
||||
{
|
||||
landToSend = realLand;
|
||||
SendLandPropertiesHandler handler = OnSendLandProperties;
|
||||
if (handler != null)
|
||||
{
|
||||
Delegate[] list = handler.GetInvocationList();
|
||||
foreach (SendLandPropertiesHandler h in list)
|
||||
{
|
||||
h(userID, realLand, out landToSend);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -194,6 +194,14 @@
|
|||
; region_manager_is_god = false
|
||||
; parcel_owner_is_god = true
|
||||
|
||||
;; More control over permissions
|
||||
;; This is definitely not SL!
|
||||
; Provides a simple control for land owners to give build rights to specific avatars
|
||||
; in publicly accessible parcels that disallow object creation in general.
|
||||
; Owners specific avatars by adding them to the Access List of the parcel
|
||||
; without having to use the Groups feature
|
||||
; simple_build_permissions = false
|
||||
|
||||
;; Default script engine to use. Currently, we only have XEngine
|
||||
; DefaultScriptEngine = "XEngine"
|
||||
|
||||
|
|
|
@ -260,6 +260,13 @@
|
|||
; Default value is all
|
||||
; allowed_script_editors = all
|
||||
|
||||
; Provides a simple control for land owners to give build rights to
|
||||
; publicly accessible parcels that disallow object creation in general.
|
||||
; Owners specific avatars by adding them to the Access List of the parcel
|
||||
; without having to use the Groups feature
|
||||
; Disabled by default
|
||||
; simple_build_permissions = False
|
||||
|
||||
; ##
|
||||
; ## SCRIPT ENGINE
|
||||
; ##
|
||||
|
|
Loading…
Reference in New Issue