diff options
-rw-r--r-- | OpenSim/Region/Framework/Scenes/SceneObjectGroup.Inventory.cs | 32 |
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 | ||