Пример #1
0
        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);
        }