优化登录用户权限缓存

This commit is contained in:
不做码农 2022-04-10 16:52:10 +08:00
parent 3eafab8292
commit 846652c1af
6 changed files with 51 additions and 42 deletions

View File

@ -86,7 +86,7 @@ namespace ZR.Admin.WebApi.Controllers.System
List<string> permissions = permissionService.GetMenuPermission(user); List<string> permissions = permissionService.GetMenuPermission(user);
LoginUser loginUser = new(user, roles, permissions); LoginUser loginUser = new(user, roles, permissions);
CacheHelper.SetCache(GlobalConstant.UserPermKEY + user.UserId, permissions); CacheService.SetUserPerms(GlobalConstant.UserPermKEY + user.UserId, permissions);
return SUCCESS(JwtUtil.GenerateJwtToken(JwtUtil.AddClaims(loginUser), jwtSettings.JwtSettings)); return SUCCESS(JwtUtil.GenerateJwtToken(JwtUtil.AddClaims(loginUser), jwtSettings.JwtSettings));
} }
@ -106,7 +106,7 @@ namespace ZR.Admin.WebApi.Controllers.System
var userid = HttpContext.GetUId(); var userid = HttpContext.GetUId();
var name = HttpContext.GetName(); var name = HttpContext.GetName();
CacheHelper.Remove(GlobalConstant.UserPermKEY + userid); CacheService.RemoveUserPerms(GlobalConstant.UserPermKEY + userid);
return SUCCESS(new { name , id = userid }); return SUCCESS(new { name , id = userid });
} }

View File

@ -10,14 +10,6 @@ namespace ZR.Admin.WebApi.Extensions
{ {
var types = source.GetType(); var types = source.GetType();
//var worker = new IdWorker(1, 1);
//if (types.GetProperty("ID") != null)
//{
// long id = worker.NextId();
// types.GetProperty("ID").SetValue(source, id.ToString(), null);
//}
if (types.GetProperty("CreateTime") != null) if (types.GetProperty("CreateTime") != null)
{ {
types.GetProperty("CreateTime").SetValue(source, DateTime.Now, null); types.GetProperty("CreateTime").SetValue(source, DateTime.Now, null);
@ -30,7 +22,6 @@ namespace ZR.Admin.WebApi.Extensions
{ {
types.GetProperty("UpdateTime").SetValue(source, DateTime.Now, null); types.GetProperty("UpdateTime").SetValue(source, DateTime.Now, null);
} }
if (types.GetProperty("Create_by") != null && context != null) if (types.GetProperty("Create_by") != null && context != null)
{ {
types.GetProperty("Create_by").SetValue(source, context.GetName(), null); types.GetProperty("Create_by").SetValue(source, context.GetName(), null);
@ -54,10 +45,6 @@ namespace ZR.Admin.WebApi.Extensions
{ {
types.GetProperty("Update_time").SetValue(source, DateTime.Now, null); types.GetProperty("Update_time").SetValue(source, DateTime.Now, null);
} }
//if (types.GetProperty("UpdateID") != null)
//{
// types.GetProperty("UpdateID").SetValue(source, userSession.UserID, null);
//}
if (types.GetProperty("UpdateBy") != null) if (types.GetProperty("UpdateBy") != null)
{ {

View File

@ -1,9 +1,6 @@
using Infrastructure; using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using Newtonsoft.Json;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
@ -130,26 +127,6 @@ namespace ZR.Admin.WebApi.Extensions
return context != null ? context.Request.Path.Value : ""; return context != null ? context.Request.Path.Value : "";
} }
private static void WhiteCookie(HttpContext context, List<Claim> claims)
{
//2.创建声明主题 指定认证方式 这里使用cookie
var claimsIdentity = new ClaimsIdentity(claims, "Login");
Task.Run(async () =>
{
await context.SignInAsync(
JwtBearerDefaults.AuthenticationScheme,//这里要注意的是HttpContext.SignInAsync(AuthenticationType,…) 所设置的Scheme一定要与前面的配置一样这样对应的登录授权才会生效。
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties()
{
IsPersistent = true,
AllowRefresh = true,
ExpiresUtc = DateTimeOffset.Now.AddDays(1),//有效时间
});
}).Wait();
}
/// <summary> /// <summary>
/// 设置请求参数 /// 设置请求参数
/// </summary> /// </summary>

View File

@ -1,5 +1,6 @@
using Microsoft.AspNetCore.Authentication; using Microsoft.AspNetCore.Authentication;
using Microsoft.AspNetCore.Authentication.Cookies; using Microsoft.AspNetCore.Authentication.Cookies;
using Microsoft.AspNetCore.Authentication.JwtBearer;
using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Http;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
@ -11,7 +12,23 @@ namespace ZR.Admin.WebApi.Framework
{ {
public class CookieUtil public class CookieUtil
{ {
public static void WhiteCookie(HttpContext context, List<Claim> claims)
{
//2.创建声明主题 指定认证方式 这里使用cookie
var claimsIdentity = new ClaimsIdentity(claims, "Login");
Task.Run(async () =>
{
await context.SignInAsync(
JwtBearerDefaults.AuthenticationScheme,//这里要注意的是HttpContext.SignInAsync(AuthenticationType,…) 所设置的Scheme一定要与前面的配置一样这样对应的登录授权才会生效。
new ClaimsPrincipal(claimsIdentity),
new AuthenticationProperties()
{
IsPersistent = true,
AllowRefresh = true,
ExpiresUtc = DateTimeOffset.Now.AddDays(1),//有效时间
});
}).Wait();
}
} }
} }

View File

@ -10,8 +10,8 @@ using System.Linq;
using System.Security.Claims; using System.Security.Claims;
using System.Text; using System.Text;
using ZR.Admin.WebApi.Extensions; using ZR.Admin.WebApi.Extensions;
using ZR.Common;
using ZR.Model.System; using ZR.Model.System;
using ZR.Service.System;
namespace ZR.Admin.WebApi.Framework namespace ZR.Admin.WebApi.Framework
{ {
@ -131,7 +131,7 @@ namespace ZR.Admin.WebApi.Framework
{ {
var userData = jwtToken.FirstOrDefault(x => x.Type == ClaimTypes.UserData).Value; var userData = jwtToken.FirstOrDefault(x => x.Type == ClaimTypes.UserData).Value;
var loginUser = JsonConvert.DeserializeObject<LoginUser>(userData); var loginUser = JsonConvert.DeserializeObject<LoginUser>(userData);
var permissions = (List<string>)CacheHelper.GetCache(GlobalConstant.UserPermKEY + loginUser?.UserId); var permissions = CacheService.GetUserPerms(GlobalConstant.UserPermKEY + loginUser?.UserId);
if (loginUser?.UserName == "admin") if (loginUser?.UserName == "admin")
{ {
permissions = new List<string>() { GlobalConstant.AdminPerm }; permissions = new List<string>() { GlobalConstant.AdminPerm };

View File

@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using ZR.Common;
namespace ZR.Service.System
{
public class CacheService
{
#region
public static List<string> GetUserPerms(string key)
{
return (List<string>)CacheHelper.GetCache(key);
}
public static void SetUserPerms(string key, object data)
{
CacheHelper.SetCache(key, data);
}
public static void RemoveUserPerms(string key)
{
CacheHelper.Remove(key);
}
#endregion
}
}