public bool HasGroupAccess(UUID avatar) { if (LandData.GroupID != UUID.Zero && (LandData.Flags & (uint)ParcelFlags.UseAccessGroup) == (uint)ParcelFlags.UseAccessGroup) { ScenePresence sp; if (!m_scene.TryGetScenePresence(avatar, out sp)) { bool isMember; if (m_groupMemberCache.TryGetValue(avatar, out isMember)) { m_groupMemberCache.Update(avatar, isMember, m_groupMemberCacheTimeout); return(isMember); } IGroupsModule groupsModule = m_scene.RequestModuleInterface <IGroupsModule>(); if (groupsModule == null) { return(false); } GroupMembershipData[] membership = groupsModule.GetMembershipData(avatar); if (membership == null || membership.Length == 0) { m_groupMemberCache.Add(avatar, false, m_groupMemberCacheTimeout); return(false); } foreach (GroupMembershipData d in membership) { if (d.GroupID == LandData.GroupID) { m_groupMemberCache.Add(avatar, true, m_groupMemberCacheTimeout); return(true); } } m_groupMemberCache.Add(avatar, false, m_groupMemberCacheTimeout); return(false); } return(sp.ControllingClient.IsGroupMember(LandData.GroupID)); } return(false); }
public bool UpdateGroupRole(UUID groupID, UUID roleID, string name, string description, string title, ulong powers, BooleanDelegate d) { if (d()) { object role; lock (m_Cache) if (m_Cache.TryGetValue("role-" + roleID.ToString(), out role)) { GroupRolesData r = (GroupRolesData)role; r.Description = description; r.Name = name; r.Powers = powers; r.Title = title; m_Cache.Update("role-" + roleID.ToString(), r, GROUPS_CACHE_TIMEOUT); } return(true); } else { lock (m_Cache) { if (m_Cache.Contains("role-" + roleID.ToString())) { m_Cache.Remove("role-" + roleID.ToString()); } // also remove these lists, because they will have an outdated role if (m_Cache.Contains("roles-" + groupID.ToString())) { m_Cache.Remove("roles-" + groupID.ToString()); } } return(false); } }