This commit is contained in:
owenchen committed 2026-05-12 10:09:31 +08:00
1 parent 31fbe199c1
commit 1c0c83af5f
469 files changed
+62544 -5

No files matched your search

@@ -0,0 +1,32 @@
using Microsoft.AspNetCore.Authorization;
namespace CloudBuilder.Core.Authorization
{
public class AuthorizationHandler : IAuthorizationHandler, IAuthorize
{
/// <summary>
/// 身份认证Authorize
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public virtual Task HandleAsync(AuthorizationHandlerContext context)
{
if (context.HasFailed)
{
return Task.CompletedTask;
}
// 判断身份认证是否通过
var isAuthenticated = context.User.Identity.IsAuthenticated;
if (isAuthenticated)
{
context.Succeed(context.PendingRequirements.FirstOrDefault()!);
return Task.CompletedTask;
}
context.Fail();
return Task.CompletedTask;
}
}
}
@@ -0,0 +1,12 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CloudBuilder.Core.Authorization
{
public interface IAuthorize
{
}
}
@@ -0,0 +1,64 @@
using CloudBuilder.Core.Application.Options;
using CloudBuilder.Core.Policy;
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace CloudBuilder.Core.Authorization
{
public class JwtGenerate
{
private readonly JwtOptions jwtOptions;
public JwtGenerate(JwtOptions jwtOptions)
{
this.jwtOptions = jwtOptions;
}
public string GenerateRefreshToken()
{
var randomNumber = new byte[32];
using (var rng = RandomNumberGenerator.Create())
{
rng.GetBytes(randomNumber);
return Convert.ToBase64String(randomNumber);
}
}
public string Generate(Dictionary<string, string> claims)
{
JwtOptions jwt = jwtOptions;
var token = string.Empty;
List<Claim> claimls = new List<Claim>();
foreach (var claim in claims)
{
claimls.Add(new Claim(claim.Key, claim.Value));
}
var key = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(jwt.Secret));
var credentials = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
var tokenHandler = new JwtSecurityTokenHandler();
var tokenDescriptor = new SecurityTokenDescriptor
{
NotBefore = DateTime.UtcNow,
Issuer = jwt.Issuer,
Audience = jwt.Audience,
Subject = new ClaimsIdentity(claimls, ClaimPolicy.BEARER, ClaimPolicy.CLAINM_USERID, ClaimPolicy.ROLE),
Expires = DateTime.UtcNow.AddMinutes(jwt.AccessExpireMins),
SigningCredentials = credentials
};
var securityToken = tokenHandler.CreateToken(tokenDescriptor);
return tokenHandler.WriteToken(securityToken);
}
}
}
@@ -0,0 +1,23 @@
using CloudBuilder.Core.Application.Options;
using CloudBuilder.Core.Policy;
using Microsoft.IdentityModel.Tokens;
using System;
using System.Collections.Generic;
using System.IdentityModel.Tokens.Jwt;
using System.Linq;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
namespace CloudBuilder.Core.Authorization
{
[TypeScript]
public class JwtInfo
{
public string AccessToken { get; set; } = null!;
public string RefreshToken { get; set; } = null!;
public DateTime CreatedTime { get; set; }
}
}
@@ -0,0 +1,47 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Microsoft.AspNetCore.Authorization
{
public class PermissionOperateAttribute : Attribute
{
public PermissionOperateAttribute(string name)
{
Name = name;
}
public PermissionOperateAttribute(string name, string operate)
{
Name = name;
Operate = operate;
}
public PermissionOperateAttribute(string name, Operate operate)
{
Name = name;
Operate = operate.ToString();
}
/// <summary>
/// 获取权限名称
/// </summary>
public string Name { get; private set; } = null!;
public string Operate { get; private set; } = null!;
}
public enum Operate
{
None,
Find,
Print,
Insert,
Update,
Delete,
Submit,
Approval
}
}
@@ -0,0 +1,49 @@
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CloudBuilder.Core.Authorization
{
public class PermissionRequirement : IAuthorizationRequirement
{
//public List<UserPermissionDisplayData> UserPermissionDisplayDatas { get; set; }
///// <summary>
///// 认证授权类型
///// </summary>
//public string ClaimType { internal get; set; }
///// <summary>
///// 发行人
///// </summary>
//public string Issuer { get; set; }
///// <summary>
///// 订阅人
///// </summary>
//public string Audience { get; set; }
///// <summary>
///// 过期时间
///// </summary>
//public TimeSpan Expiration { get; set; }
///// <summary>
///// 签名验证
///// </summary>
//public SigningCredentials SigningCredentials { get; set; }
public PermissionRequirement()
{
}
//public PermissionRequirement(List<UserPermissionDisplayData> permissions)
//{
// //ClaimType = claimType;
// UserPermissionDisplayDatas = permissions;
// //Issuer = issuer;
// //Audience = audience;
// //Expiration = expiration;
// //SigningCredentials = signingCredentials;
//}
}
}
@@ -0,0 +1,28 @@
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace CloudBuilder.Core.Authorization
{
public class TypeScriptAttribute : Attribute
{
public TypeScriptAttribute()
{
}
public TypeScriptAttribute(string name)
{
Name = name;
}
/// <summary>
/// 获取权限名称
/// </summary>
public string Name { get; private set; } = null!;
}
}