分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 代码编程

.net core 在abp中扩展abpsession

发布时间:2023-09-06 02:31责任编辑:顾先生关键词:暂无标签

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

.net core 在abp中扩展abpsession

原文地址:https://www.cnblogs.com/KQNLL/p/10327467.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved