aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs32
1 files changed, 27 insertions, 5 deletions
diff --git a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
index 7b9ea8b..399e341 100644
--- a/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
+++ b/OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs
@@ -277,6 +277,7 @@ namespace OpenSim.Region.Framework.Scenes
277 } 277 }
278 } 278 }
279 279
280 private uint m_EffectiveGroupOrEveryOnePerms;
280 public uint EffectiveGroupOrEveryOnePerms 281 public uint EffectiveGroupOrEveryOnePerms
281 { 282 {
282 get 283 get
@@ -285,7 +286,7 @@ namespace OpenSim.Region.Framework.Scenes
285 // bc this is on heavy duty code paths 286 // bc this is on heavy duty code paths
286 // but for now we need to test the concept 287 // but for now we need to test the concept
287 AggregateDeepPerms(); 288 AggregateDeepPerms();
288 return m_EffectiveEveryOnePerms | m_EffectiveGroupPerms; 289 return m_EffectiveGroupOrEveryOnePerms;
289 } 290 }
290 } 291 }
291 292
@@ -339,18 +340,28 @@ namespace OpenSim.Region.Framework.Scenes
339 // recover modify and move 340 // recover modify and move
340 baseGroupPerms &= movemodmask; 341 baseGroupPerms &= movemodmask;
341 group |= baseGroupPerms; 342 group |= baseGroupPerms;
343 group &= allmask;
344
345 uint groupOrEveryone = group;
346
342 if((group & copytransfermast) == 0) 347 if((group & copytransfermast) == 0)
343 group |= (uint)PermissionMask.Transfer; 348 group |= (uint)PermissionMask.Transfer;
344 group &= allmask;
345 m_EffectiveGroupPerms = group; 349 m_EffectiveGroupPerms = group;
346 350
347 // recover move 351 // recover move
348 baseEveryonePerms &= (uint)PermissionMask.Move; 352 baseEveryonePerms &= (uint)PermissionMask.Move;
349 everyone |= baseEveryonePerms; 353 everyone |= baseEveryonePerms;
354 everyone &= allmask;
355
356 groupOrEveryone |= everyone;
357
350 if((everyone & copytransfermast) == 0) // not much sense but as sl 358 if((everyone & copytransfermast) == 0) // not much sense but as sl
351 everyone |= (uint)PermissionMask.Transfer; 359 everyone |= (uint)PermissionMask.Transfer;
352 everyone &= allmask;
353 m_EffectiveEveryOnePerms = everyone; 360 m_EffectiveEveryOnePerms = everyone;
361
362 if((groupOrEveryone & copytransfermast) == 0) // not much sense but as sl
363 groupOrEveryone |= (uint)PermissionMask.Transfer;
364 m_EffectiveGroupOrEveryOnePerms = groupOrEveryone;
354 } 365 }
355 } 366 }
356 367
@@ -375,6 +386,7 @@ namespace OpenSim.Region.Framework.Scenes
375 for (int i = 0; i < parts.Length; i++) 386 for (int i = 0; i < parts.Length; i++)
376 { 387 {
377 SceneObjectPart part = parts[i]; 388 SceneObjectPart part = parts[i];
389 part.AggregateInnerPerms();
378 owner &= part.AggregatedInnerOwnerPerms; 390 owner &= part.AggregatedInnerOwnerPerms;
379 group &= part.AggregatedInnerGroupPerms; 391 group &= part.AggregatedInnerGroupPerms;
380 everyone &= part.AggregatedInnerEveryonePerms; 392 everyone &= part.AggregatedInnerEveryonePerms;
@@ -390,18 +402,28 @@ namespace OpenSim.Region.Framework.Scenes
390 // recover modify and move 402 // recover modify and move
391 baseGroupPerms &= movemodmask; 403 baseGroupPerms &= movemodmask;
392 group |= baseGroupPerms; 404 group |= baseGroupPerms;
405 group &= allmask;
406
407 uint groupOrEveryone = group;
408
393 if((group & copytransfermast) == 0) 409 if((group & copytransfermast) == 0)
394 group |= (uint)PermissionMask.Transfer; 410 group |= (uint)PermissionMask.Transfer;
395 group &= allmask;
396 m_EffectiveGroupPerms = group; 411 m_EffectiveGroupPerms = group;
397 412
398 // recover move 413 // recover move
399 baseEveryonePerms &= (uint)PermissionMask.Move; 414 baseEveryonePerms &= (uint)PermissionMask.Move;
400 everyone |= baseEveryonePerms; 415 everyone |= baseEveryonePerms;
416 everyone &= allmask;
417
418 groupOrEveryone |= everyone;
419
401 if((everyone & copytransfermast) == 0) // not much sense but as sl 420 if((everyone & copytransfermast) == 0) // not much sense but as sl
402 everyone |= (uint)PermissionMask.Transfer; 421 everyone |= (uint)PermissionMask.Transfer;
403 everyone &= allmask;
404 m_EffectiveEveryOnePerms = everyone; 422 m_EffectiveEveryOnePerms = everyone;
423
424 if((groupOrEveryone & copytransfermast) == 0) // not much sense but as sl
425 groupOrEveryone |= (uint)PermissionMask.Transfer;
426 m_EffectiveGroupOrEveryOnePerms = groupOrEveryone;
405 } 427 }
406 } 428 }
407 429