diff --git a/.gitignore b/.gitignore
index bbd88c0..02f9e1c 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,4 +14,5 @@ Logs/
node_modules/
-*.lscache
\ No newline at end of file
+*.lscache
+/src/SimpleAdmin.Api/wwwroot/
diff --git a/Directory.Build.props b/Directory.Build.props
new file mode 100644
index 0000000..d24302d
--- /dev/null
+++ b/Directory.Build.props
@@ -0,0 +1,6 @@
+
+
+
+ 8.0.5.12
+
+
diff --git a/SimpleAdmin.sln b/SimpleAdmin.sln
index a5b3729..41c7569 100644
--- a/SimpleAdmin.sln
+++ b/SimpleAdmin.sln
@@ -10,11 +10,11 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "items", "items", "{BE5132AD
NuGet.Config = NuGet.Config
SPEC.md = SPEC.md
开发复刻说明.md = 开发复刻说明.md
- oms表结构与接口设计2026040802.md = oms表结构与接口设计2026040802.md
.gitignore = .gitignore
.dockerignore = .dockerignore
oms表结构与接口设计20260427.md = oms表结构与接口设计20260427.md
db.sql = db.sql
+ Directory.Build.props = Directory.Build.props
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleAdmin.Api", "src\SimpleAdmin.Api\SimpleAdmin.Api.csproj", "{229ED167-9ECC-4736-8DFB-522EEA8FF680}"
diff --git a/SimpleAdmin.sln.DotSettings.user b/SimpleAdmin.sln.DotSettings.user
index 2664039..39396e3 100644
--- a/SimpleAdmin.sln.DotSettings.user
+++ b/SimpleAdmin.sln.DotSettings.user
@@ -19,6 +19,7 @@
ForceIncluded
ForceIncluded
ForceIncluded
+ ForceIncluded
<SessionState ContinuousTestingMode="0" IsActive="True" Name="All tests from <src>\<SimpleAdmin.Api.IntegrationTests>" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session">
<Project Location="D:\my\itfx\admin\src\SimpleAdmin.Api.IntegrationTests" Presentation="<src>\<SimpleAdmin.Api.IntegrationTests>" />
</SessionState>
\ No newline at end of file
diff --git a/src/Oms.Application/Oms.Application.csproj b/src/Oms.Application/Oms.Application.csproj
index 4d03535..3a58643 100644
--- a/src/Oms.Application/Oms.Application.csproj
+++ b/src/Oms.Application/Oms.Application.csproj
@@ -16,9 +16,9 @@
-
-
-
+
+
+
diff --git a/src/Oms.Application/Services/Customers/CustomerService.cs b/src/Oms.Application/Services/Customers/CustomerService.cs
index 6cd6db4..ffb35da 100644
--- a/src/Oms.Application/Services/Customers/CustomerService.cs
+++ b/src/Oms.Application/Services/Customers/CustomerService.cs
@@ -23,9 +23,9 @@ public class CustomerService : ApplicationService
private ICustomerRepository CustomerRepository => LazyServiceProvider.GetRequiredService();
- private IUserService UserService => LazyServiceProvider.GetRequiredService();
+ private UserService UserService => LazyServiceProvider.GetRequiredService();
- private IRoleService RoleService => LazyServiceProvider.GetRequiredService();
+ private RoleService RoleService => LazyServiceProvider.GetRequiredService();
private FakeRbacDbContext RbacDbContext => LazyServiceProvider.GetRequiredService();
diff --git a/src/Oms.Domain/Oms.Domain.csproj b/src/Oms.Domain/Oms.Domain.csproj
index 860c3c1..fa492f4 100644
--- a/src/Oms.Domain/Oms.Domain.csproj
+++ b/src/Oms.Domain/Oms.Domain.csproj
@@ -7,8 +7,8 @@
-
-
+
+
diff --git a/src/Oms.Domain/OmsDomainModule.cs b/src/Oms.Domain/OmsDomainModule.cs
index b602f53..a63cf51 100644
--- a/src/Oms.Domain/OmsDomainModule.cs
+++ b/src/Oms.Domain/OmsDomainModule.cs
@@ -3,7 +3,7 @@ using Fake.Modularity;
namespace Oms.Domain;
-[DependsOn(typeof(FakeDomainDrivenDesignModule))]
+[DependsOn(typeof(FakeDddDomainModule))]
public class OmsDomainModule : FakeModule
{
}
diff --git a/src/Oms.SqlSugarCore/Oms.SqlSugarCore.csproj b/src/Oms.SqlSugarCore/Oms.SqlSugarCore.csproj
index 50482d6..a5d7bcc 100644
--- a/src/Oms.SqlSugarCore/Oms.SqlSugarCore.csproj
+++ b/src/Oms.SqlSugarCore/Oms.SqlSugarCore.csproj
@@ -7,7 +7,7 @@
-
+
diff --git a/src/SimpleAdmin.Api/Auth/AuthService.cs b/src/SimpleAdmin.Api/Auth/AuthService.cs
index 26a2f10..d86a777 100644
--- a/src/SimpleAdmin.Api/Auth/AuthService.cs
+++ b/src/SimpleAdmin.Api/Auth/AuthService.cs
@@ -2,7 +2,6 @@ using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using Fake.Application;
using Fake.Domain.Exceptions;
-using Fake.Helpers;
using Fake.Rbac.Application.Dtos.Auth;
using Fake.Rbac.Application.Dtos.Menu;
using Fake.Rbac.Application.Dtos.User;
@@ -11,10 +10,8 @@ using Fake.Rbac.Application.Services;
using Fake.Rbac.Domain.Managers;
using Fake.Rbac.Domain.UserAggregate;
using Fake.Rbac.Infrastructure;
-using Fake.Security.Claims;
+using Fake.Users;
using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Hosting;
-using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Oms.Application.Shared;
@@ -33,8 +30,8 @@ namespace SimpleAdmin.Api.Auth;
[ApiExplorerSettings(GroupName = "RBAC")]
public class AuthService(
AccountManager accountManager,
- IUserService userService,
- IMenuService menuService,
+ UserService userService,
+ MenuService menuService,
IJwtService jwtService,
IUserRepository userRepository,
IWebHostEnvironment webHostEnvironment,
@@ -43,6 +40,8 @@ public class AuthService(
ICustomerRepository customerRepository)
: ApplicationService
{
+ private Guid CurrentUserGuid => CurrentUser.FindClaimValueOrNull(ClaimTypes.NameIdentifier)!.To();
+
///
/// 用户或客户登录。
///
@@ -116,12 +115,10 @@ public class AuthService(
if (IsCustomerPrincipal())
{
- var currentUserId = CurrentUser.Id ?? throw new UnauthorizedAccessException("用户未登录");
- return await BuildAdminUserInfoAsync(currentUserId, cancellationToken);
+ return await BuildAdminUserInfoAsync(CurrentUserGuid, cancellationToken);
}
- var userId = CurrentUser.Id ?? throw new UnauthorizedAccessException("用户未登录");
- return await BuildAdminUserInfoAsync(userId, cancellationToken);
+ return await BuildAdminUserInfoAsync(CurrentUserGuid, cancellationToken);
}
///
@@ -138,9 +135,8 @@ public class AuthService(
await ChangeCustomerPasswordAsync(input.OldPassword, input.NewPassword, cancellationToken);
return;
}
-
- var userId = CurrentUser.Id ?? throw new UnauthorizedAccessException("用户未登录");
- await accountManager.UpdatePasswordAsync(userId, input.OldPassword, input.NewPassword, cancellationToken);
+
+ await accountManager.UpdatePasswordAsync(CurrentUserGuid, input.OldPassword, input.NewPassword, cancellationToken);
}
///
@@ -154,7 +150,7 @@ public class AuthService(
{
EnsureAdminPrincipal();
- var userId = CurrentUser.Id ?? throw new UnauthorizedAccessException("用户未登录");
+ var userId = CurrentUserGuid;
var user = await userRepository.FirstAsync(u => u.Id == userId, cancellationToken: cancellationToken);
user.Update(input.Name, input.Email);
await userRepository.UpdateAsync(user, cancellationToken: cancellationToken);
@@ -173,7 +169,7 @@ public class AuthService(
{
EnsureAdminPrincipal();
- var userId = CurrentUser.Id ?? throw new UnauthorizedAccessException("用户未登录");
+ var userId = CurrentUserGuid;
if (file == null || file.Length == 0)
{
throw new DomainException("请选择要上传的文件");
@@ -415,7 +411,7 @@ public class AuthService(
return new CustomerPrincipalContext
{
- PrincipalId = CurrentUser.Id ?? throw new UnauthorizedAccessException("客户未登录"),
+ PrincipalId = CurrentUserGuid,
Customer = customer,
DisplayName = customer.WechatNickname ?? customer.CustomerName,
AccountCode = customer.CustomerCode,
diff --git a/src/SimpleAdmin.Api/Auth/CustomerRoleSeedContributor.cs b/src/SimpleAdmin.Api/Auth/CustomerRoleSeedContributor.cs
index 3218882..9272773 100644
--- a/src/SimpleAdmin.Api/Auth/CustomerRoleSeedContributor.cs
+++ b/src/SimpleAdmin.Api/Auth/CustomerRoleSeedContributor.cs
@@ -4,7 +4,7 @@ using Fake.Rbac.Application.Services;
namespace SimpleAdmin.Api.Auth;
-public class CustomerRoleSeedContributor(IRoleService roleService) : IDataSeedContributor
+public class CustomerRoleSeedContributor(RoleService roleService) : IDataSeedContributor
{
public const string CustomerRoleCode = "Customer";
public const string CustomerRoleName = "客户";
diff --git a/src/SimpleAdmin.Api/SimpleAdmin.Api.csproj b/src/SimpleAdmin.Api/SimpleAdmin.Api.csproj
index 5cf9166..61ff6fe 100644
--- a/src/SimpleAdmin.Api/SimpleAdmin.Api.csproj
+++ b/src/SimpleAdmin.Api/SimpleAdmin.Api.csproj
@@ -6,21 +6,13 @@
enable
Linux
-
-
-
+
-
-
-
-
-
-
-
-
-
- .dockerignore
-
+
+
+
+
+
diff --git a/src/SimpleAdmin.Api/SimpleAdminApiModule.cs b/src/SimpleAdmin.Api/SimpleAdminApiModule.cs
index 99380a5..064ac66 100644
--- a/src/SimpleAdmin.Api/SimpleAdminApiModule.cs
+++ b/src/SimpleAdmin.Api/SimpleAdminApiModule.cs
@@ -4,12 +4,14 @@ using Fake.Modularity;
using Fake.Rbac.Application;
using Fake.Rbac.Infrastructure;
using Fake.AspNetCore.Auditing;
-using Fake.AspNetCore.Mvc;
+using Fake.AspNetCore.Authentication;
+using Fake.AspNetCore.ExceptionHandling;
+using Fake.AspNetCore.Newtonsoft;
+using Fake.AspNetCore.Swagger;
using Fake.FeiShu;
using Fake.Security.Claims;
using Fake.Serilog;
using Microsoft.AspNetCore.HttpOverrides;
-using Microsoft.Extensions.Logging;
using Oms.Application;
using Oms.SqlSugarCore;
using SimpleAdmin.Api.Auth;
@@ -53,6 +55,9 @@ public class SimpleAdminApiModule : FakeModule
settings.TypePredicate = type => type != typeof(Fake.Rbac.Application.Services.AuthService);
});
});
+
+ //Json格式化全局处理
+ context.Services.AddFakeNewtonsoft();
services.AddFakeAspNetCoreAuditing();
diff --git a/src/SimpleAdmin.Api/SimpleJwtService.cs b/src/SimpleAdmin.Api/SimpleJwtService.cs
index b1cc2fd..adfe75f 100644
--- a/src/SimpleAdmin.Api/SimpleJwtService.cs
+++ b/src/SimpleAdmin.Api/SimpleJwtService.cs
@@ -14,7 +14,7 @@ namespace SimpleAdmin.Api;
/// 自定义simple-admin auth jwt service
///
[Dependency(Replace = true)]
-public class SimpleJwtService(IOptions jwtOptions, IUserService userService, FakeRbacDbContext rbacDbContext)
+public class SimpleJwtService(IOptions jwtOptions, UserService userService, FakeRbacDbContext rbacDbContext)
: JwtService(jwtOptions, userService)
{
public override async Task> GenerateClaimsByUserIdAsync(Guid userId,
@@ -28,6 +28,7 @@ public class SimpleJwtService(IOptions jwtOptions, IUserService user
{
claims.RemoveAll(x => x.Type == FakeClaimTypes.UserId);
claims.Add(new Claim(FakeClaimTypes.UserId, mapId.Value.ToString()));
+ claims.Add(new Claim(ClaimTypes.NameIdentifier, userId.ToString()));
}
return claims;