merge fix

This commit is contained in:
UbitUmarov
2017-05-04 12:57:11 +01:00
20 changed files with 157 additions and 130 deletions

View File

@@ -1182,7 +1182,7 @@ namespace OpenSim.Region.CoreModules.Framework.InventoryAccess
}
rootPart.TrimPermissions();
so.AggregateDeepPerms();
so.InvalidateDeepEffectivePerms();
if (isAttachment)
so.FromItemID = item.ID;

View File

@@ -146,7 +146,7 @@ namespace OpenSim.Region.CoreModules.World.Objects.BuySell
child.TriggerScriptChangedEvent(Changed.OWNER);
child.ApplyNextOwnerPermissions();
}
group.AggregatePerms();
group.InvalidateDeepEffectivePerms();
}
part.ObjectSaleType = 0;

View File

@@ -293,6 +293,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
scenePermissions.OnDeleteObject += CanDeleteObject;
scenePermissions.OnEditObjectByIDs += CanEditObjectByIDs;
scenePermissions.OnEditObject += CanEditObject;
scenePermissions.OnEditObjectPerms += CanEditObjectPerms;
scenePermissions.OnInventoryTransfer += CanInventoryTransfer;
scenePermissions.OnMoveObject += CanMoveObject;
scenePermissions.OnTakeObject += CanTakeObject;
@@ -391,6 +392,7 @@ namespace OpenSim.Region.CoreModules.World.Permissions
scenePermissions.OnDeleteObject -= CanDeleteObject;
scenePermissions.OnEditObjectByIDs -= CanEditObjectByIDs;
scenePermissions.OnEditObject -= CanEditObject;
scenePermissions.OnEditObjectPerms -= CanEditObjectPerms;
scenePermissions.OnInventoryTransfer -= CanInventoryTransfer;
scenePermissions.OnMoveObject -= CanMoveObject;
scenePermissions.OnTakeObject -= CanTakeObject;
@@ -1387,6 +1389,35 @@ namespace OpenSim.Region.CoreModules.World.Permissions
return true;
}
private bool CanEditObjectPerms(SceneObjectGroup sog, UUID userID)
{
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
if (m_bypassPermissions) return m_bypassPermissionsValue;
if (sog == null)
return false;
if(sog.OwnerID == userID || IsAdministrator(userID))
return true;
UUID sogGroupID = sog.GroupID;
if(sogGroupID == UUID.Zero || sogGroupID != sog.OwnerID)
return false;
uint perms = sog.EffectiveOwnerPerms;
if((perms & (uint)PermissionMask.Modify) == 0)
return false;
ulong powers = 0;
if(GroupMemberPowers(sogGroupID, userID, ref powers))
{
if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
return true;
}
return false;
}
private bool CanEditObjectInventory(UUID objectID, UUID userID)
{
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
@@ -1678,7 +1709,6 @@ namespace OpenSim.Region.CoreModules.World.Permissions
return false;
}
private bool CanReturnObjects(ILandObject land, ScenePresence sp, List<SceneObjectGroup> objects)
{
DebugPermissionInformation(MethodInfo.GetCurrentMethod().Name);
@@ -2289,23 +2319,31 @@ namespace OpenSim.Region.CoreModules.World.Permissions
if (sog == null)
return false;
uint perms = GetObjectPermissions(userID, sog, true);
if((perms & (uint)PermissionMask.Modify) == 0)
if(sog.OwnerID == userID || IsAdministrator(userID))
return true;
if(sog.IsAttachment)
return false;
UUID sogGroupID = sog.GroupID;
if(sogGroupID == UUID.Zero || sogGroupID != sog.OwnerID)
return false;
TaskInventoryItem ti = part.Inventory.GetInventoryItem(itemID);
if(ti == null)
return false;
uint itperms = GetObjectItemPermissions(userID, ti);
ulong powers = 0;
if(GroupMemberPowers(sogGroupID, userID, ref powers))
{
if((powers & (ulong)GroupPowers.ObjectManipulate) != 0)
return true;
if((itperms & (uint)PermissionMask.Copy) == 0)
return false;
if(sog.OwnerID != userID && (itperms & (uint)PermissionMask.Transfer) == 0)
return false;
return true;
if((ti.EveryonePermissions & (uint)PermissionMask.Copy) != 0)
return true;
}
return false;
}
// object inventory to object inventory item drag and drop

View File

@@ -107,7 +107,7 @@ namespace OpenSim.Region.CoreModules.World.Vegetation
sceneObject.SetGroup(groupID, null);
m_scene.AddNewSceneObject(sceneObject, true);
sceneObject.AggregatePerms();
sceneObject.InvalidateDeepEffectivePerms();
return sceneObject;
}