* Comitting 0001271: [PATCH] Refactor permissions to fully allow stacking permissions modules. From Melanie. Thanks Melanie!
parent
2a988f187e
commit
a4efa93993
|
@ -31,8 +31,5 @@ namespace OpenSim.Region.Environment.Interfaces
|
|||
{
|
||||
public interface IScenePermissions
|
||||
{
|
||||
bool BypassPermissions { get; set; }
|
||||
bool BypassPermissionsValue { get; set; }
|
||||
uint GenerateClientFlags(LLUUID user, LLUUID objID);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -205,7 +205,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate
|
|||
|
||||
// This needs to be updated for SuperEstateOwnerUser.. a non existing user in the estatesettings.xml
|
||||
// So make sure you really trust your region owners. because they can add other estate manaagers to your other estates
|
||||
if (remote_client.AgentId == m_scene.RegionInfo.MasterAvatarAssignedUUID || m_scene.Permissions.BypassPermissions)
|
||||
if (remote_client.AgentId == m_scene.RegionInfo.MasterAvatarAssignedUUID || m_scene.ExternalChecks.ExternalChecksBypassPermissions())
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.AddEstateManager(user);
|
||||
remote_client.sendEstateManagersList(invoice, m_scene.RegionInfo.EstateSettings.estateManagers, m_scene.RegionInfo.EstateSettings.estateID);
|
||||
|
@ -219,7 +219,7 @@ namespace OpenSim.Region.Environment.Modules.World.Estate
|
|||
case 512:
|
||||
// This needs to be updated for SuperEstateOwnerUser.. a non existing user in the estatesettings.xml
|
||||
// So make sure you really trust your region owners. because they can add other estate manaagers to your other estates
|
||||
if (remote_client.AgentId == m_scene.RegionInfo.MasterAvatarAssignedUUID || m_scene.Permissions.BypassPermissions)
|
||||
if (remote_client.AgentId == m_scene.RegionInfo.MasterAvatarAssignedUUID || m_scene.ExternalChecks.ExternalChecksBypassPermissions())
|
||||
{
|
||||
m_scene.RegionInfo.EstateSettings.RemoveEstateManager(user);
|
||||
remote_client.sendEstateManagersList(invoice, m_scene.RegionInfo.EstateSettings.estateManagers, m_scene.RegionInfo.EstateSettings.estateID);
|
||||
|
@ -438,4 +438,4 @@ namespace OpenSim.Region.Environment.Modules.World.Estate
|
|||
sendRegionHandshake(client);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -63,23 +63,7 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
|||
private bool m_bypassPermissions = false;
|
||||
private bool m_bypassPermissionsValue = true;
|
||||
private bool m_debugPermissions = false;
|
||||
public bool BypassPermissions
|
||||
{
|
||||
get { return m_bypassPermissions; }
|
||||
set { m_bypassPermissions = value; }
|
||||
}
|
||||
|
||||
public bool BypassPermissionsValue
|
||||
{
|
||||
get { return m_bypassPermissionsValue; }
|
||||
set { m_bypassPermissionsValue = value; }
|
||||
}
|
||||
|
||||
public bool DebugPermissions
|
||||
{
|
||||
get { return m_debugPermissions; }
|
||||
set { m_debugPermissions = value; }
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region ICommandableModule Members
|
||||
|
@ -157,7 +141,10 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
|||
m_scene.RegisterModuleInterface<IScenePermissions>(this);
|
||||
|
||||
//Register functions with Scene External Checks!
|
||||
m_scene.ExternalChecks.addBypassPermissions(BypassPermissions); //FULLY IMPLEMENTED
|
||||
m_scene.ExternalChecks.addSetBypassPermissions(SetBypassPermissions); //FULLY IMPLEMENTED
|
||||
m_scene.ExternalChecks.addCheckAbandonParcel(CanAbandonParcel); //FULLY IMPLEMENTED
|
||||
m_scene.ExternalChecks.addGenerateClientFlags(GenerateClientFlags); //NOT YET FULLY IMPLEMENTED
|
||||
m_scene.ExternalChecks.addCheckBeGodLike(CanBeGodLike); //FULLY IMPLEMENTED
|
||||
m_scene.ExternalChecks.addCheckDuplicateObject(CanDuplicateObject); //FULLY IMPLEMENTED
|
||||
m_scene.ExternalChecks.addCheckDeleteObject(CanDeleteObject); //MAYBE FULLY IMPLEMENTED
|
||||
|
@ -260,6 +247,16 @@ namespace OpenSim.Region.Environment.Modules.World.Permissions
|
|||
}
|
||||
#endregion
|
||||
|
||||
public bool BypassPermissions()
|
||||
{
|
||||
return m_bypassPermissions;
|
||||
}
|
||||
|
||||
public void SetBypassPermissions(bool value)
|
||||
{
|
||||
m_bypassPermissions=value;
|
||||
}
|
||||
|
||||
#region Object Permissions
|
||||
|
||||
public uint GenerateClientFlags(LLUUID user, LLUUID objID)
|
||||
|
|
|
@ -115,7 +115,6 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
protected IXMLRPC m_xmlrpcModule;
|
||||
protected IWorldComm m_worldCommModule;
|
||||
protected IAvatarFactory m_AvatarFactory;
|
||||
protected IScenePermissions m_permissions;
|
||||
protected IConfigSource m_config;
|
||||
|
||||
// Central Update Loop
|
||||
|
@ -173,14 +172,6 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
get { return m_timedilation; }
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// The reference by which general permissions in the scene can be set and queried.
|
||||
/// </summary>
|
||||
public IScenePermissions Permissions
|
||||
{
|
||||
get { return m_permissions; }
|
||||
}
|
||||
|
||||
public int TimePhase
|
||||
{
|
||||
get { return m_timePhase; }
|
||||
|
@ -660,7 +651,6 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
m_worldCommModule = RequestModuleInterface<IWorldComm>();
|
||||
XferManager = RequestModuleInterface<IXfer>();
|
||||
m_AvatarFactory = RequestModuleInterface<IAvatarFactory>();
|
||||
m_permissions = RequestModuleInterface<IScenePermissions>();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
|
|
@ -45,6 +45,78 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
|
||||
#region Object Permission Checks
|
||||
|
||||
public delegate uint GenerateClientFlags(LLUUID userID, LLUUID objectIDID);
|
||||
private List<GenerateClientFlags> GenerateClientFlagsCheckFunctions = new List<GenerateClientFlags>();
|
||||
|
||||
public void addGenerateClientFlags(GenerateClientFlags delegateFunc)
|
||||
{
|
||||
if (!GenerateClientFlagsCheckFunctions.Contains(delegateFunc))
|
||||
GenerateClientFlagsCheckFunctions.Add(delegateFunc);
|
||||
}
|
||||
public void removeGenerateClientFlags(GenerateClientFlags delegateFunc)
|
||||
{
|
||||
if (GenerateClientFlagsCheckFunctions.Contains(delegateFunc))
|
||||
GenerateClientFlagsCheckFunctions.Remove(delegateFunc);
|
||||
}
|
||||
|
||||
public uint ExternalChecksGenerateClientFlags(LLUUID userID, LLUUID objectID)
|
||||
{
|
||||
uint perms=(uint)2147483647;
|
||||
foreach (GenerateClientFlags check in GenerateClientFlagsCheckFunctions)
|
||||
{
|
||||
perms &= check(userID, objectID);
|
||||
}
|
||||
return perms;
|
||||
}
|
||||
|
||||
public delegate void SetBypassPermissions(bool value);
|
||||
private List<SetBypassPermissions> SetBypassPermissionsCheckFunctions = new List<SetBypassPermissions>();
|
||||
|
||||
public void addSetBypassPermissions(SetBypassPermissions delegateFunc)
|
||||
{
|
||||
if (!SetBypassPermissionsCheckFunctions.Contains(delegateFunc))
|
||||
SetBypassPermissionsCheckFunctions.Add(delegateFunc);
|
||||
}
|
||||
public void removeSetBypassPermissions(SetBypassPermissions delegateFunc)
|
||||
{
|
||||
if (SetBypassPermissionsCheckFunctions.Contains(delegateFunc))
|
||||
SetBypassPermissionsCheckFunctions.Remove(delegateFunc);
|
||||
}
|
||||
|
||||
public void ExternalChecksSetBypassPermissions(bool value)
|
||||
{
|
||||
foreach (SetBypassPermissions check in SetBypassPermissionsCheckFunctions)
|
||||
{
|
||||
check(value);
|
||||
}
|
||||
}
|
||||
|
||||
public delegate bool BypassPermissions();
|
||||
private List<BypassPermissions> BypassPermissionsCheckFunctions = new List<BypassPermissions>();
|
||||
|
||||
public void addBypassPermissions(BypassPermissions delegateFunc)
|
||||
{
|
||||
if (!BypassPermissionsCheckFunctions.Contains(delegateFunc))
|
||||
BypassPermissionsCheckFunctions.Add(delegateFunc);
|
||||
}
|
||||
public void removeBypassPermissions(BypassPermissions delegateFunc)
|
||||
{
|
||||
if (BypassPermissionsCheckFunctions.Contains(delegateFunc))
|
||||
BypassPermissionsCheckFunctions.Remove(delegateFunc);
|
||||
}
|
||||
|
||||
public bool ExternalChecksBypassPermissions()
|
||||
{
|
||||
foreach (BypassPermissions check in BypassPermissionsCheckFunctions)
|
||||
{
|
||||
if (check() == false)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
#region REZ OBJECT
|
||||
public delegate bool CanRezObject(int objectCount, LLUUID owner, LLVector3 objectPosition, Scene scene);
|
||||
private List<CanRezObject> CanRezObjectCheckFunctions = new List<CanRezObject>();
|
||||
|
@ -654,4 +726,4 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -191,7 +191,7 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
|
||||
public void SetBypassPermissionsOnCurrentScene(bool bypassPermissions)
|
||||
{
|
||||
ForEachCurrentScene(delegate(Scene scene) { scene.Permissions.BypassPermissions = bypassPermissions; });
|
||||
ForEachCurrentScene(delegate(Scene scene) { scene.ExternalChecks.ExternalChecksSetBypassPermissions(bypassPermissions); });
|
||||
}
|
||||
|
||||
private void ForEachCurrentScene(Action<Scene> func)
|
||||
|
|
|
@ -1351,7 +1351,7 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
if (part.OwnerID != cAgentID)
|
||||
{
|
||||
// Apply Next Owner Permissions if we're not bypassing permissions
|
||||
if (!m_scene.Permissions.BypassPermissions)
|
||||
if (!m_scene.ExternalChecks.ExternalChecksBypassPermissions())
|
||||
m_rootPart.ApplyNextOwnerPermissions();
|
||||
}
|
||||
|
||||
|
|
|
@ -476,13 +476,7 @@ namespace OpenSim.Region.Environment.Scenes
|
|||
|
||||
public uint GenerateClientFlags(LLUUID ObjectID)
|
||||
{
|
||||
if(m_scene.Permissions == null)
|
||||
{
|
||||
SceneObjectPart task=m_scene.GetSceneObjectPart(ObjectID);
|
||||
|
||||
return task.GetEffectiveObjectFlags() | (uint)2147483647;
|
||||
}
|
||||
return m_scene.Permissions.GenerateClientFlags(m_uuid, ObjectID);
|
||||
return m_scene.ExternalChecks.ExternalChecksGenerateClientFlags(m_uuid, ObjectID);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
|
|
Loading…
Reference in New Issue