diff options
Diffstat (limited to '')
-rw-r--r-- | OpenSim/Addons/Groups/Service/GroupsService.cs | 59 |
1 files changed, 36 insertions, 23 deletions
diff --git a/OpenSim/Addons/Groups/Service/GroupsService.cs b/OpenSim/Addons/Groups/Service/GroupsService.cs index 07641ef..ea0fedd 100644 --- a/OpenSim/Addons/Groups/Service/GroupsService.cs +++ b/OpenSim/Addons/Groups/Service/GroupsService.cs | |||
@@ -126,7 +126,7 @@ namespace OpenSim.Groups | |||
126 | 126 | ||
127 | #endregion | 127 | #endregion |
128 | 128 | ||
129 | public UUID CreateGroup(string RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, | 129 | public UUID CreateGroup(string RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, |
130 | bool allowPublish, bool maturePublish, UUID founderID, out string reason) | 130 | bool allowPublish, bool maturePublish, UUID founderID, out string reason) |
131 | { | 131 | { |
132 | reason = string.Empty; | 132 | reason = string.Empty; |
@@ -264,7 +264,7 @@ namespace OpenSim.Groups | |||
264 | if (ownerRole != null) | 264 | if (ownerRole != null) |
265 | ownerRoleID = ownerRole.RoleID; | 265 | ownerRoleID = ownerRole.RoleID; |
266 | 266 | ||
267 | // Check visibility? | 267 | // Check visibility? |
268 | // When we don't want to check visibility, we pass it "all" as the requestingAgentID | 268 | // When we don't want to check visibility, we pass it "all" as the requestingAgentID |
269 | bool checkVisibility = !RequestingAgentID.Equals(UUID.Zero.ToString()); | 269 | bool checkVisibility = !RequestingAgentID.Equals(UUID.Zero.ToString()); |
270 | 270 | ||
@@ -307,20 +307,20 @@ namespace OpenSim.Groups | |||
307 | m.Contribution = Int32.Parse(d.Data["Contribution"]); | 307 | m.Contribution = Int32.Parse(d.Data["Contribution"]); |
308 | m.ListInProfile = d.Data["ListInProfile"] == "1" ? true : false; | 308 | m.ListInProfile = d.Data["ListInProfile"] == "1" ? true : false; |
309 | 309 | ||
310 | GridUserData gud = m_GridUserService.Get(d.PrincipalID); | 310 | GridUserData gud = m_GridUserService.Get(d.PrincipalID); |
311 | if (gud != null) | 311 | if (gud != null) |
312 | { | 312 | { |
313 | if (bool.Parse(gud.Data["Online"])) | 313 | if (bool.Parse(gud.Data["Online"])) |
314 | { | 314 | { |
315 | m.OnlineStatus = @"Online"; | 315 | m.OnlineStatus = @"Online"; |
316 | } | 316 | } |
317 | else | 317 | else |
318 | { | 318 | { |
319 | int unixtime = int.Parse(gud.Data["Login"]); | 319 | int unixtime = int.Parse(gud.Data["Login"]); |
320 | // The viewer is very picky about how these strings are formed. Eg. it will crash on malformed dates! | 320 | // The viewer is very picky about how these strings are formed. Eg. it will crash on malformed dates! |
321 | m.OnlineStatus = (unixtime == 0) ? @"unknown" : Util.ToDateTime(unixtime).ToString("MM/dd/yyyy"); | 321 | m.OnlineStatus = (unixtime == 0) ? @"unknown" : Util.ToDateTime(unixtime).ToString("MM/dd/yyyy"); |
322 | } | 322 | } |
323 | } | 323 | } |
324 | 324 | ||
325 | // Is this person an owner of the group? | 325 | // Is this person an owner of the group? |
326 | m.IsOwner = (rolemembershipsList.Find(r => r.RoleID == ownerRoleID) != null) ? true : false; | 326 | m.IsOwner = (rolemembershipsList.Find(r => r.RoleID == ownerRoleID) != null) ? true : false; |
@@ -486,7 +486,7 @@ namespace OpenSim.Groups | |||
486 | // check permissions | 486 | // check permissions |
487 | bool limited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMemberLimited); | 487 | bool limited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMemberLimited); |
488 | bool unlimited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMember) | IsOwner(RequestingAgentID, GroupID); | 488 | bool unlimited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMember) | IsOwner(RequestingAgentID, GroupID); |
489 | if (!limited || !unlimited) | 489 | if (!limited && !unlimited) |
490 | { | 490 | { |
491 | m_log.DebugFormat("[Groups]: ({0}) Attempt at assigning {1} to role {2} denied because of lack of permission", RequestingAgentID, AgentID, RoleID); | 491 | m_log.DebugFormat("[Groups]: ({0}) Attempt at assigning {1} to role {2} denied because of lack of permission", RequestingAgentID, AgentID, RoleID); |
492 | return false; | 492 | return false; |
@@ -496,7 +496,7 @@ namespace OpenSim.Groups | |||
496 | if (!unlimited && limited) | 496 | if (!unlimited && limited) |
497 | { | 497 | { |
498 | // check whether person's has this role | 498 | // check whether person's has this role |
499 | RoleMembershipData rolemembership = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID); | 499 | RoleMembershipData rolemembership = m_Database.RetrieveRoleMember(GroupID, RoleID, RequestingAgentID); |
500 | if (rolemembership == null) | 500 | if (rolemembership == null) |
501 | { | 501 | { |
502 | m_log.DebugFormat("[Groups]: ({0}) Attempt at assigning {1} to role {2} denied because of limited permission", RequestingAgentID, AgentID, RoleID); | 502 | m_log.DebugFormat("[Groups]: ({0}) Attempt at assigning {1} to role {2} denied because of limited permission", RequestingAgentID, AgentID, RoleID); |
@@ -516,13 +516,26 @@ namespace OpenSim.Groups | |||
516 | return false; | 516 | return false; |
517 | 517 | ||
518 | // check permissions | 518 | // check permissions |
519 | bool limited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMemberLimited); | ||
519 | bool unlimited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMember) || IsOwner(RequestingAgentID, GroupID); | 520 | bool unlimited = HasPower(RequestingAgentID, GroupID, GroupPowers.AssignMember) || IsOwner(RequestingAgentID, GroupID); |
520 | if (!unlimited) | 521 | if (!limited && !unlimited) |
521 | { | 522 | { |
522 | m_log.DebugFormat("[Groups]: ({0}) Attempt at removing {1} from role {2} denied because of lack of permission", RequestingAgentID, AgentID, RoleID); | 523 | m_log.DebugFormat("[Groups]: ({0}) Attempt at removing {1} from role {2} denied because of lack of permission", RequestingAgentID, AgentID, RoleID); |
523 | return false; | 524 | return false; |
524 | } | 525 | } |
525 | 526 | ||
527 | // AssignMemberLimited means that the person can assign another person to the same roles that she has in the group | ||
528 | if (!unlimited && limited) | ||
529 | { | ||
530 | // check whether person's has this role | ||
531 | RoleMembershipData rolemembership = m_Database.RetrieveRoleMember(GroupID, RoleID, RequestingAgentID); | ||
532 | if (rolemembership == null) | ||
533 | { | ||
534 | m_log.DebugFormat("[Groups]: ({0}) Attempt at removing {1} from role {2} denied because of limited permission", RequestingAgentID, AgentID, RoleID); | ||
535 | return false; | ||
536 | } | ||
537 | } | ||
538 | |||
526 | RoleMembershipData rolemember = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID); | 539 | RoleMembershipData rolemember = m_Database.RetrieveRoleMember(GroupID, RoleID, AgentID); |
527 | 540 | ||
528 | if (rolemember == null) | 541 | if (rolemember == null) |
@@ -540,8 +553,8 @@ namespace OpenSim.Groups | |||
540 | { | 553 | { |
541 | newRoleID = r.RoleID; | 554 | newRoleID = r.RoleID; |
542 | break; | 555 | break; |
543 | } | 556 | } |
544 | } | 557 | } |
545 | 558 | ||
546 | MembershipData member = m_Database.RetrieveMember(GroupID, AgentID); | 559 | MembershipData member = m_Database.RetrieveMember(GroupID, AgentID); |
547 | if (member != null) | 560 | if (member != null) |
@@ -699,7 +712,7 @@ namespace OpenSim.Groups | |||
699 | m_Database.StoreMember(membership); | 712 | m_Database.StoreMember(membership); |
700 | } | 713 | } |
701 | 714 | ||
702 | public bool AddGroupNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, | 715 | public bool AddGroupNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, |
703 | bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) | 716 | bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID) |
704 | { | 717 | { |
705 | // Check perms | 718 | // Check perms |
@@ -812,7 +825,7 @@ namespace OpenSim.Groups | |||
812 | if (RoleID != UUID.Zero) | 825 | if (RoleID != UUID.Zero) |
813 | _AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); | 826 | _AddAgentToGroupRole(RequestingAgentID, AgentID, GroupID, RoleID); |
814 | 827 | ||
815 | // Make thit this active group | 828 | // Make this the active group |
816 | PrincipalData pdata = new PrincipalData(); | 829 | PrincipalData pdata = new PrincipalData(); |
817 | pdata.PrincipalID = AgentID; | 830 | pdata.PrincipalID = AgentID; |
818 | pdata.ActiveGroupID = GroupID; | 831 | pdata.ActiveGroupID = GroupID; |