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来获取扩展字段的值了。

  • 相关阅读:
    存储过程系列之存储过程sql查询存储过程的使用
    SQL Server 连接字符串和身份验证详解
    存储过程
    Objective-C:MRC(引用计数器)在OC内部的可变对象是适用的,不可变对象是不适用的(例如 NSString、NSArray等)
    Objective-C:MRC(引用计数器)获得对象所有权的方式(init、retain、copy等)
    Objective-C:MRC手动释放对象内存举例(引用计数器)
    C语言:内存的分配与管理
    Objective-C:继承、分类(Category、extension)、协议(protocol),个人理解,仅供参考
    Objective-C:在类中设置不同协议
    Objective-C:继承的体现
  • 原文地址:https://www.cnblogs.com/KQNLL/p/10327467.html
Copyright © 2011-2022 走看看