diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs | 9 | ||||
-rw-r--r-- | OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | 34 |
2 files changed, 41 insertions, 2 deletions
diff --git a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs index fc7d63a..c6fd72e 100644 --- a/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs +++ b/OpenSim/Region/CoreModules/Avatar/Friends/FriendsModule.cs | |||
@@ -395,6 +395,8 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
395 | 395 | ||
396 | // if it leaves, we want to know, too | 396 | // if it leaves, we want to know, too |
397 | client.OnLogout += OnLogout; | 397 | client.OnLogout += OnLogout; |
398 | client.OnGrantUserRights += GrantUserFriendRights; | ||
399 | |||
398 | } | 400 | } |
399 | 401 | ||
400 | private void ClientClosed(UUID AgentId, Scene scene) | 402 | private void ClientClosed(UUID AgentId, Scene scene) |
@@ -1108,7 +1110,10 @@ namespace OpenSim.Region.CoreModules.Avatar.Friends | |||
1108 | // tell everyone that we are offline | 1110 | // tell everyone that we are offline |
1109 | SendPresenceState(remoteClient, fl, false); | 1111 | SendPresenceState(remoteClient, fl, false); |
1110 | } | 1112 | } |
1111 | } | 1113 | private void GrantUserFriendRights(IClientAPI remoteClient, UUID requester, UUID target, int rights) |
1112 | 1114 | { | |
1115 | ((Scene)remoteClient.Scene).CommsManager.UpdateUserFriendPerms(requester, target, (uint)rights); | ||
1116 | } | ||
1117 | } | ||
1113 | #endregion | 1118 | #endregion |
1114 | } | 1119 | } |
diff --git a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs index fe9de1b..effe1f0 100644 --- a/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs +++ b/OpenSim/Region/CoreModules/World/Permissions/PermissionsModule.cs | |||
@@ -476,6 +476,37 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
476 | 476 | ||
477 | return false; | 477 | return false; |
478 | } | 478 | } |
479 | protected bool IsFriendWithPerms(UUID user,UUID objectOwner) | ||
480 | { | ||
481 | |||
482 | if (user == UUID.Zero) return false; | ||
483 | |||
484 | List<FriendListItem> profile = m_scene.CommsManager.GetUserFriendList(user); | ||
485 | foreach (FriendListItem item in profile) | ||
486 | { | ||
487 | m_log.Warn("IsFriendWithPerms called" + item.FriendPerms.ToString()); | ||
488 | if(item.Friend == objectOwner) | ||
489 | { | ||
490 | // if (item.FriendPerms == 3) | ||
491 | // { | ||
492 | // return true; | ||
493 | // } | ||
494 | // if (item.FriendPerms == 4) | ||
495 | // { | ||
496 | // return true; | ||
497 | // } | ||
498 | // if (item.FriendPerms == 5) | ||
499 | // { | ||
500 | // return true; | ||
501 | // } | ||
502 | // if (item.FriendPerms == 7) | ||
503 | // { | ||
504 | // return true; | ||
505 | // } | ||
506 | } | ||
507 | } | ||
508 | return false; | ||
509 | } | ||
479 | 510 | ||
480 | protected bool IsEstateManager(UUID user) | 511 | protected bool IsEstateManager(UUID user) |
481 | { | 512 | { |
@@ -565,6 +596,9 @@ namespace OpenSim.Region.CoreModules.World.Permissions | |||
565 | // Object owners should be able to edit their own content | 596 | // Object owners should be able to edit their own content |
566 | if (user == objectOwner) | 597 | if (user == objectOwner) |
567 | return objectOwnerMask; | 598 | return objectOwnerMask; |
599 | |||
600 | if (IsFriendWithPerms(user, objectOwner)) | ||
601 | return objectOwnerMask; | ||
568 | 602 | ||
569 | // Estate users should be able to edit anything in the sim | 603 | // Estate users should be able to edit anything in the sim |
570 | if (IsEstateManager(user) && m_RegionOwnerIsGod && !IsAdministrator(objectOwner)) | 604 | if (IsEstateManager(user) && m_RegionOwnerIsGod && !IsAdministrator(objectOwner)) |