/// <summary>尝试登录。如果Session未登录则借助Cookie</summary>
        /// <param name="provider">提供者</param>
        /// <param name="context">Http上下文,兼容NetCore</param>
        public static IManageUser TryLogin(this IManageProvider provider, HttpContext context)
        {
            var serviceProvider = context?.RequestServices;

            // 判断当前登录用户
            var user = provider.GetCurrent(serviceProvider);

            if (user == null)
            {
                // 尝试从Cookie登录
                user = provider.LoadCookie(true, context);
                if (user != null)
                {
                    provider.SetCurrent(user, serviceProvider);
                }
            }

            // 设置前端当前用户
            if (user != null)
            {
                provider.SetPrincipal(serviceProvider);
            }

            return(user);
        }
Beispiel #2
0
        /// <summary>设置当前用户</summary>
        /// <param name="provider">提供者</param>
        /// <param name="context">Http上下文,兼容NetCore</param>
        public static void SetPrincipal(this IManageProvider provider, IServiceProvider context = null)
        {
            //var ctx = context as Microsoft.AspNetCore.Http.HttpContext;
            var ctx = context as HttpContext ?? HttpContext.Current;

            if (ctx == null)
            {
                return;
            }

            var user = provider.GetCurrent(context);

            if (user == null)
            {
                return;
            }

            if (!(user is IIdentity id) || ctx.User?.Identity == id)
            {
                return;
            }

            // 角色列表
            var roles = new List <String>();

            if (user is IUser user2)
            {
                roles.AddRange(user2.Roles.Select(e => e + ""));
            }

            var up = new GenericPrincipal(id, roles.ToArray());

            ctx.User = up;
            Thread.CurrentPrincipal = up;
        }
        /// <summary>设置当前用户</summary>
        /// <param name="provider">提供者</param>
        /// <param name="context">Http上下文,兼容NetCore</param>
        public static void SetPrincipal(this IManageProvider provider, IServiceProvider context = null)
        {
            var ctx = ModelExtension.GetService <IHttpContextAccessor>(context)?.HttpContext;

            if (ctx == null)
            {
                return;
            }

            var user = provider.GetCurrent(context);

            if (user == null)
            {
                return;
            }

            if (user is not IIdentity id || ctx.User?.Identity == id)
            {
                return;
            }

            // 角色列表
            var roles = new List <String>();

            if (user is IUser user2)
            {
                roles.AddRange(user2.Roles.Select(e => e + ""));
            }

            var up = new GenericPrincipal(id, roles.ToArray());

            ctx.User = up;
            Thread.CurrentPrincipal = up;
        }
Beispiel #4
0
        /// <summary>尝试登录。如果Session未登录则借助Cookie</summary>
        /// <param name="provider">提供者</param>
        /// <param name="context">Http上下文,兼容NetCore</param>
        public static IManageUser TryLogin(this IManageProvider provider, IServiceProvider context = null)
        {
            // 判断当前登录用户
            var user = provider.GetCurrent(context);

            if (user == null)
            {
                // 尝试从Cookie登录
                user = provider.LoadCookie(true, context);
                if (user != null)
                {
                    provider.SetCurrent(user, context);
                }
            }

            // 设置前端当前用户
            if (user != null)
            {
                provider.SetPrincipal(context);
            }

            return(user);
        }