private LocalSession GetLocalSession(SiteInfo siteInfo, User user, ServerSession session) { var userRoles = repoUr.Query(o => o.UserId == user.UserId); var roles = userRoles.Select(o => o.RoleId).ToArray(); var pemissions = repoRp.Query(o => userRoles.Any(ur => ur.RoleId == o.RoleId)).ToArray(); List <AppPrivilege> aps = new List <AppPrivilege>(); foreach (var per in pemissions) { AppPrivilege ap = new AppPrivilege() { AppName = per.AppName }; var app = host.GetApps().GetAppByName(per.AppName); ap.ProtectedUris = app.ProtectedUris.Select(o => o.Uri.ToLower()).ToArray(); ap.AllowedUris = app.ProtectedUris.Where(o => { if (o.Position > 0 && o.Position < per.Permissions.Length) { return(per.Permissions[o.Position] == '1'); } return(false); }).Select(o => o.Uri.ToLower()).ToArray(); aps.Add(ap); } var lsession = new LocalSession() { SiteName = session.SiteName, SessionId = session.SessionId, AccessToken = session.AccessToken, User = user.ToUserSession(), Roles = roles, Privileges = aps.ToArray(), Theme = user.Theme, Skin = user.Skin, Locale = user.Locale, TimeZone = user.TimeZone }; return(lsession); }