zoukankan      html  css  js  c++  java
  • .net core 在abp中扩展abpsession

    1、定义扩展类

    /// <summary>
        /// IAbpSession扩展类
        /// </summary>
        public static class SessionExtensions
        {
            /// <summary>
            /// 当前用户角色信息
            /// </summary>
            /// <param name="session"></param>
            /// <returns></returns>
            public static string GetRolesCode(this IAbpSession session)
            {
                try
                {
                    var claimsPrincipal = Thread.CurrentPrincipal as ClaimsPrincipal;
                    var claim = claimsPrincipal?.Claims.FirstOrDefault(c => c.Type == "rolesCode");
                    if (claim == null || string.IsNullOrEmpty(claim.Value))
                    {
                        return null;
                    }
                    return claim.Value.ToString();
                }
                catch
                {
                    return null;
                }
            }
        }

    2、为扩展的abpssion填充数据,可以在全局入口或者过滤器中定义。这里我使用action过滤器来做。

    public class MyActionFilterAttribute : ActionFilterAttribute
        {
            private LoginMode _loginModel;
            /// <summary>
            /// 过滤器
            /// </summary>
            /// <param name="loginModel">登录类型</param>
            public MyActionFilterAttribute(LoginMode loginModel)
            {
                _loginModel = loginModel;
            }
    
           
    
            public override void OnActionExecuting(ActionExecutingContext filterContext)
            {
                string authType = ConfigManagerConf.GetValue("AppSetting:AuthType");
                if (authType == "debug")
                {
                    string userId = "0";
                    string userName = "system";
                    string allCompany = "true";
                    string companyId = "1";
                    string rolecode = "pps_publish";
                    CreateIdentity(userId, userName, allCompany, companyId, rolecode, filterContext.HttpContext);
                }
                base.OnActionExecuting(filterContext);
            }
    
    
    
    
            /// <summary>
            /// 添加用户数据到ClaimsIdentity,为扩展自定义IAbpSession准备数据
            /// </summary>
            /// <param name="userId"></param>
            /// <param name="userName"></param>
            /// <param name="allCompany"></param>
            /// <param name="companyId"></param>
            private void CreateIdentity(string userId, string userName, string allCompany, string companyId, string rolecodes, HttpContext HttpContext)
            {
                var claimsIdentity = new ClaimsIdentity();
                claimsIdentity.AddClaim(new Claim(ClaimTypes.NameIdentifier, userId, ClaimValueTypes.String));
                claimsIdentity.AddClaim(new Claim(ClaimTypes.Name, userName, ClaimValueTypes.String));
                claimsIdentity.AddClaim(new Claim("IsAllCompany", allCompany, ClaimValueTypes.String));
                claimsIdentity.AddClaim(new Claim("CompanyId", companyId, ClaimValueTypes.String));
                claimsIdentity.AddClaim(new Claim("rolesCode", rolecodes, ClaimValueTypes.String));
                var claimsPrincipal = new ClaimsPrincipal(claimsIdentity);
                Thread.CurrentPrincipal = claimsPrincipal;
                HttpContext.SignInAsync(claimsPrincipal);
                Thread.Sleep(10);
            }
    
        }

    这样,就可以直接在应用层通过AbpSession或者在表示层构造函数注入IAbpSession来获取扩展字段的值了。

  • 相关阅读:
    webpack打包加大就是为了加大文件允许体积,提升报错门栏
    webpack打包配置服务
    webpack 打包 js图片
    webpack 打包css 图片
    webpack打包多个html打包,分别引入不同的 多个 js 文件 流程
    webpack打包所有css打包压缩到一个js里面
    webapck 打包多个 js ,多个 html 同时打包流程
    webpack打包多个js 合并成默认 main.js文件步骤
    wbpack打包准备工作
    模拟攒机小程序 兼容提示 电源功率推荐 小白攒机神器
  • 原文地址:https://www.cnblogs.com/KQNLL/p/10327467.html
Copyright © 2011-2022 走看看