bool IGroupRolemembersInterface.TryGetValue(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal, out GroupRolemember grolemem) { MemoryGroupInfo info; MemoryGroupRole role; grolemem = null; if (roleID != UUID.Zero) { if (m_Groups.TryGetValue(group.ID, out info) && info.Roles.TryGetValue(roleID, out role) && role.Rolemembers.ContainsKey(principal)) { grolemem = new GroupRolemember { Group = info.ID, Powers = role.Powers, Principal = principal, RoleID = roleID }; } } else { if (m_Groups.TryGetValue(group.ID, out info) && info.Roles.TryGetValue(roleID, out role) && info.Members.ContainsKey(principal)) { grolemem = new GroupRolemember { Group = info.ID, Powers = role.Powers, Principal = principal, RoleID = roleID }; } } return(grolemem != null); }
public GroupRolemember(GroupRolemember src) { Group = new UGI(src.Group); RoleID = src.RoleID; Principal = new UGUI(src.Principal); Powers = src.Powers; }
void IGroupRolemembersInterface.Add(UGUI requestingAgent, GroupRolemember rolemember) { bool isUnlimited = false; if (m_InnerService.Invites[requestingAgent, rolemember.Group, rolemember.RoleID, rolemember.Principal].Count != 0) { } else { if (!IsGroupOwner(rolemember.Group, requestingAgent)) { try { VerifyAgentPowers(rolemember.Group, requestingAgent, GroupPowers.AssignMember); isUnlimited = true; } catch (GroupInsufficientPowersException) { VerifyAgentPowers(rolemember.Group, requestingAgent, GroupPowers.AssignMemberLimited); } } else { isUnlimited = true; } if (!isUnlimited && !Rolemembers.ContainsKey(requestingAgent, rolemember.Group, rolemember.RoleID, requestingAgent)) { throw new GroupInsufficientPowersException(GroupPowers.AssignMemberLimited); } } m_InnerService.Rolemembers.Add(requestingAgent, rolemember); }
public GroupMember AddAgentToGroup(UGUI requestingAgent, UGI group, UUID roleid, UGUI agent, string accessToken) { bool alreadyInGroup; GroupMember gmem; alreadyInGroup = Members.TryGetValue(requestingAgent, group, agent, out gmem); if (!alreadyInGroup) { gmem = Members.Add(requestingAgent, group, agent, roleid, accessToken); } try { if (!Rolemembers.ContainsKey(requestingAgent, group, UUID.Zero, agent)) { var rolemember = new GroupRolemember { Group = group, Principal = agent, RoleID = UUID.Zero }; Rolemembers.Add(requestingAgent, rolemember); } if (UUID.Zero != roleid) { var rolemember = new GroupRolemember { Group = group, Principal = agent, RoleID = roleid }; Rolemembers.Add(requestingAgent, rolemember); } try { var invites = Invites[requestingAgent, group, roleid, agent]; foreach (var invite in invites) { invites.Remove(invite); } } catch { /* intentionally ignored */ } } catch { if (!alreadyInGroup) { Members.Delete(requestingAgent, group, agent); } } return(gmem); }
List <GroupRolemember> IGroupRolemembersInterface.this[UUI requestingAgent, UGI group, UUID roleID] { get { var rolemembers = new List <GroupRolemember>(); if (UUID.Zero == roleID) { GroupRole groupRole; if (!Roles.TryGetValue(requestingAgent, group, roleID, out groupRole)) { return(rolemembers); } using (var conn = new MySqlConnection(m_ConnectionString)) { conn.Open(); using (var cmd = new MySqlCommand("SELECT * FROM groupmemberships WHERE rm.GroupID = @groupid", conn)) { cmd.Parameters.AddParameter("@groupid", group.ID); using (MySqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { GroupRolemember grolemem = reader.ToGroupRolememberEveryone(groupRole.Powers); grolemem.Principal = ResolveName(grolemem.Principal); grolemem.Group = ResolveName(requestingAgent, grolemem.Group); rolemembers.Add(grolemem); } } } } } else { using (var conn = new MySqlConnection(m_ConnectionString)) { conn.Open(); using (var cmd = new MySqlCommand("SELECT rm.*, r.Powers FROM grouprolememberships AS rm INNER JOIN grouproles AS r ON rm.GroupID = r.GroupID AND rm.RoleID = r.RoleID WHERE rm.GroupID = @groupid AND rm.RoleID = @roleid", conn)) { cmd.Parameters.AddParameter("@groupid", group.ID); cmd.Parameters.AddParameter("@roleid", roleID); using (MySqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { GroupRolemember grolemem = reader.ToGroupRolemember(); grolemem.Principal = ResolveName(grolemem.Principal); grolemem.Group = ResolveName(requestingAgent, grolemem.Group); rolemembers.Add(grolemem); } } } } } return(rolemembers); } }
public virtual GroupInfo CreateGroup(UGUI requestingAgent, GroupInfo ginfo, GroupPowers everyonePowers, GroupPowers ownerPowers) { var role_everyone = new GroupRole { ID = UUID.Zero, Group = ginfo.ID, Name = "Everyone", Description = "Everyone in the group", Title = "Member of " + ginfo.ID.GroupName, Powers = everyonePowers }; var role_owner = new GroupRole { ID = UUID.Random, Group = ginfo.ID, Name = "Owners", Description = "Owners of the group", Title = "Owner of " + ginfo.ID.GroupName, Powers = ownerPowers }; ginfo.OwnerRoleID = role_owner.ID; var gmemrole_owner = new GroupRolemember { Group = ginfo.ID, RoleID = role_owner.ID, Principal = ginfo.Founder }; var gmemrole_everyone = new GroupRolemember { Group = ginfo.ID, RoleID = role_everyone.ID, Principal = ginfo.Founder }; Groups.Create(requestingAgent, ginfo); try { Roles.Add(requestingAgent, role_everyone); Roles.Add(requestingAgent, role_owner); Members.Add(requestingAgent, ginfo.ID, ginfo.Founder, role_owner.ID, UUID.Random.ToString()); Rolemembers.Add(requestingAgent, gmemrole_owner); Rolemembers.Add(requestingAgent, gmemrole_everyone); ginfo.RoleCount = 2; ginfo.MemberCount = 1; } catch { Groups.Delete(requestingAgent, ginfo.ID); throw; } return(ginfo); }
List <GroupRolemember> IGroupRolemembersInterface.this[UGUI requestingAgent, UGI group] { get { var rolemembers = new List <GroupRolemember>(); using (var conn = new NpgsqlConnection(m_ConnectionString)) { conn.Open(); using (var cmd = new NpgsqlCommand("SELECT rm.*, r.\"Powers\" FROM grouprolememberships AS rm INNER JOIN grouproles AS r ON rm.\"GroupID\" = r.\"GroupID\" AND rm.\"RoleID\" = r.\"RoleID\" WHERE rm.\"GroupID\" = @groupid", conn)) { cmd.Parameters.AddParameter("@groupid", group.ID); using (NpgsqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { GroupRolemember grolemem = reader.ToGroupRolemember(); grolemem.Principal = ResolveName(grolemem.Principal); grolemem.Group = ResolveName(requestingAgent, grolemem.Group); rolemembers.Add(grolemem); } } } using (var cmd = new NpgsqlCommand("SELECT * FROM groupmemberships WHERE rm.\"PrincipalID\" = @principalid", conn)) { cmd.Parameters.AddParameter("@groupid", group.ID); using (NpgsqlDataReader reader = cmd.ExecuteReader()) { while (reader.Read()) { GroupRole groupRole; if (Roles.TryGetValue(requestingAgent, group, UUID.Zero, out groupRole)) { GroupRolemember grolemem = reader.ToGroupRolememberEveryone(groupRole.Powers); grolemem.Principal = ResolveName(grolemem.Principal); grolemem.Group = ResolveName(requestingAgent, grolemem.Group); rolemembers.Add(grolemem); } } } } } return(rolemembers); } }
bool IGroupRolemembersInterface.TryGetValue(UUI requestingAgent, UGI group, UUID roleID, UUI principal, out GroupRolemember grolemem) { grolemem = null; if (UUID.Zero == roleID) { GroupMember gmem; GroupRole role; if (Members.TryGetValue(requestingAgent, group, principal, out gmem) && Roles.TryGetValue(requestingAgent, group, UUID.Zero, out role)) { grolemem = new GroupRolemember() { Powers = role.Powers, Principal = ResolveName(principal), RoleID = UUID.Zero, Group = gmem.Group }; return(true); } } else { using (var conn = new MySqlConnection(m_ConnectionString)) { conn.Open(); using (var cmd = new MySqlCommand("SELECT rm.*, r.Powers FROM grouprolememberships AS rm INNER JOIN grouproles AS r ON rm.GroupID = r.GroupID AND rm.RoleID = r.RoleID WHERE rm.GroupID = @groupid AND rm.RoleID = @roleid and rm.PrincipalID = @principalid", conn)) { cmd.Parameters.AddParameter("@groupid", group.ID); cmd.Parameters.AddParameter("@roleid", roleID); cmd.Parameters.AddParameter("@principalid", principal.ID); using (MySqlDataReader reader = cmd.ExecuteReader()) { if (reader.Read()) { grolemem = reader.ToGroupRolemember(); grolemem.Principal = ResolveName(grolemem.Principal); grolemem.Group = ResolveName(requestingAgent, grolemem.Group); return(true); } } } } } return(false); }
void IGroupRolemembersInterface.Add(UUI requestingAgent, GroupRolemember rolemember) { if (rolemember.RoleID == UUID.Zero) { return; /* ignore those */ } var vals = new Dictionary <string, object> { ["GroupID"] = rolemember.Group.ID, ["RoleID"] = rolemember.RoleID, ["PrincipalID"] = rolemember.Principal.ID }; using (var conn = new MySqlConnection(m_ConnectionString)) { conn.Open(); conn.InsertInto("grouprolememberships", vals); } }
void IGroupRolemembersInterface.Add(UGUI requestingAgent, GroupRolemember rolemember) { m_Groups[rolemember.Group.ID].Roles[rolemember.RoleID].Rolemembers.Add(rolemember.Principal, true); }
bool IGroupRolemembersInterface.TryGetValue(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal, out GroupRolemember grolemem) { grolemem = default(GroupRolemember); GroupsBrokerEntry groupsService; return(TryGetGroupsService(group, out groupsService) && groupsService.Rolemembers.TryGetValue(requestingAgent, group, roleID, principal, out grolemem)); }
void IGroupRolemembersInterface.Add(UGUI requestingAgent, GroupRolemember rolemember) => GetGroupsService(rolemember.Group).Rolemembers.Add(requestingAgent, rolemember);
bool IGroupRolemembersInterface.TryGetValue(UGUI requestingAgent, UGI group, UUID roleID, UGUI principal, out GroupRolemember grolemem) => m_InnerService.Rolemembers.TryGetValue(requestingAgent, group, roleID, principal, out grolemem);