internal IEnumerable <Guid> GetUserGroupsGuids(int tenantId, Guid userID) { var httpRequestDictionary = new HttpRequestDictionary <List <Guid> >(Accessor?.HttpContext, "GroupInfoID"); var fromCache = httpRequestDictionary.Get(userID.ToString()); if (fromCache != null) { return(fromCache); } var result = new List <Guid>(); var refs = GetRefsInternal(tenantId); if (refs is UserGroupRefStore store) { var userRefs = store.GetRefsByUser(userID); if (userRefs != null) { var toAdd = userRefs.Where(r => !r.Removed && r.RefType == UserGroupRefType.Contains && !Constants.BuildinGroups.Any(g => g.ID.Equals(r.GroupId))) .Select(r => r.GroupId); result.AddRange(toAdd); } } httpRequestDictionary.Add(userID.ToString(), result); return(result); }
internal List <GroupInfo> GetUserGroups(Tenant tenant, Guid userID, IncludeType includeType, Guid?categoryId) { var httpRequestDictionary = new HttpRequestDictionary <List <GroupInfo> >(Accessor?.HttpContext, "GroupInfo"); var fromCache = httpRequestDictionary.Get(userID.ToString()); if (fromCache != null) { return(fromCache); } var result = new List <GroupInfo>(); var distinctUserGroups = new List <GroupInfo>(); var refs = GetRefsInternal(tenant.TenantId); IEnumerable <UserGroupRef> userRefs = null; if (refs is UserGroupRefStore store) { userRefs = store.GetRefsByUser(userID); } var userRefsContainsNotRemoved = userRefs?.Where(r => !r.Removed && r.RefType == UserGroupRefType.Contains).ToList(); foreach (var g in GetGroupsInternal(tenant.TenantId).Where(g => !categoryId.HasValue || g.CategoryID == categoryId)) { if (((g.CategoryID == Constants.SysGroupCategoryId || userRefs == null) && IsUserInGroupInternal(tenant, userID, g.ID, refs)) || (userRefsContainsNotRemoved != null && userRefsContainsNotRemoved.Any(r => r.GroupId == g.ID))) { distinctUserGroups.Add(g); } } if (IncludeType.Distinct == (includeType & IncludeType.Distinct)) { result.AddRange(distinctUserGroups); } result.Sort((group1, group2) => string.Compare(group1.Name, group2.Name, StringComparison.Ordinal)); httpRequestDictionary.Add(userID.ToString(), result); return(result); }