// ======================================================================================== static methods
public static IEnumerable<WorkspaceGroupList> GetWorkspaceGroupLists(User user)
{
// 1. query groups under workspaces
var settings = new QuerySettings { EnableAutofilters = false };
var groups = SenseNet.Search.ContentQuery.Query("+TypeIs:Group +Workspace:*", settings).Nodes;
// 2. select groups in which the current user is a member (Owner, Editor)
var wsGroups = groups.Select(g => new WorkspaceGroup { Workspace = (g as SenseNet.ContentRepository.Group).Workspace, Group = (g as SenseNet.ContentRepository.Group) });
wsGroups = wsGroups.Where(wsg => user.IsInGroup(wsg.Group));
// 3. group by workspaces
var wsGroupLists = from wsg in wsGroups
orderby wsg.Workspace.DisplayName
group wsg by wsg.Workspace into w
select new WorkspaceGroupList { Workspace = w.Key, Groups = w };
return wsGroupLists;
}