XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEExtension.NetCore.ServerInteractive

[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig

公开
关注 0 Fork 0 Star 0
返回提交历史

XFEstudio/XFEExtension.NetCore.ServerInteractive

增强用户服务基类与权限校验逻辑,发布3.2.0

本次提交: - 将 TestCoreService 基类切换为 ServerCoreUserServiceBase,并调整命名空间; - IUserServiceBase 接口新增 Session、DeviceInfo、User 属性及 VerifyUserInfo 方法; - UserHelper 工具类参数 sessionId 统一为 session,优化方法和注释; - ServerCoreUserServiceBase 实现用户信息自动获取与校验; - 项目版本号升级为 3.2.0,正式发布。

eb8656f
XFE工作室室长 <mail@xfegzs.com>
提交于

代码差异

5 个文件 +73 -18
Modified XFEExtension.NetCore.ServerInteractive.TServer/Services/TestCoreService.cs +3 -2
@@ -1,9 +1,9 @@
1 1 using XFEExtension.NetCore.ServerInteractive.Attributes;
2 using XFEExtension.NetCore.ServerInteractive.Implements.CoreService;
2 using XFEExtension.NetCore.ServerInteractive.Utilities.Server.Services.CoreService;
3 3
4 4 namespace XFEExtension.NetCore.ServerInteractive.TServer.Services;
5 5
6 public partial class TestCoreService : ServerCoreStandardServiceBase
6 public partial class TestCoreService : ServerCoreUserServiceBase
7 7 {
8 8 [EntryPoint("v1/test/*")]
9 9 public async Task TestEntryPoint() => await Close($"""
@@ -11,5 +11,6 @@ public partial class TestCoreService : ServerCoreStandardServiceBase
11 11 Your route is {Route};
12 12 Your IP is {ClientIP};
13 13 Your headers are {string.Join(',', Args.Request.Headers)}
14 {}
14 15 """);
15 16 }
Modified XFEExtension.NetCore.ServerInteractive/Interfaces/IUserServiceBase.cs +18 -0
@@ -8,6 +8,18 @@ namespace XFEExtension.NetCore.ServerInteractive.Interfaces;
8 8 /// </summary>
9 9 public interface IUserServiceBase
10 10 {
11 /// <summary>
12 /// 会话
13 /// </summary>
14 string? Session { get; }
15 /// <summary>
16 /// 设备信息
17 /// </summary>
18 string? DeviceInfo { get; }
19 /// <summary>
20 /// 当前请求的用户
21 /// </summary>
22 IUserInfo? User { get; }
11 23 /// <summary>
12 24 /// Json序列化设置
13 25 /// </summary>
@@ -36,4 +48,10 @@ public interface IUserServiceBase
36 48 /// 获取用户方法
37 49 /// </summary>
38 50 Func<IEnumerable<IUserInfo>> GetUserFunction { get; set; }
51
52 /// <summary>
53 /// 校验用户信息(仅限标准请求)
54 /// </summary>
55 /// <returns></returns>
56 (string session, string deviceInfo, IUserInfo user) VerifyUserInfo();
39 57 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Helpers/UserHelper.cs +7 -7
@@ -182,18 +182,18 @@ public static class UserHelper
182 182 /// <summary>
183 183 /// 校验用户权限(使用Session)
184 184 /// </summary>
185 /// <param name="sessionId"></param>
185 /// <param name="session"></param>
186 186 /// <param name="deviceInfo"></param>
187 187 /// <param name="ipAddress"></param>
188 188 /// <param name="requiredPermissionLevel"></param>
189 189 /// <param name="encryptedUserLoginModels"></param>
190 190 /// <param name="userInfoList"></param>
191 191 /// <returns></returns>
192 public static UserOperateResult ValidateUserPermission(string? sessionId, string? deviceInfo, string ipAddress, int requiredPermissionLevel, IEnumerable<EncryptedUserLoginModel> encryptedUserLoginModels, IEnumerable<IUserInfo> userInfoList)
192 public static UserOperateResult ValidateUserPermission(string? session, string? deviceInfo, string ipAddress, int requiredPermissionLevel, IEnumerable<EncryptedUserLoginModel> encryptedUserLoginModels, IEnumerable<IUserInfo> userInfoList)
193 193 {
194 if (sessionId.IsNullOrWhiteSpace() || deviceInfo.IsNullOrWhiteSpace())
194 if (session.IsNullOrWhiteSpace() || deviceInfo.IsNullOrWhiteSpace())
195 195 return UserOperateResult.UserNotFound;
196 var result = GetUser(sessionId, deviceInfo, ipAddress, encryptedUserLoginModels, userInfoList, out var user);
196 var result = GetUser(session, deviceInfo, ipAddress, encryptedUserLoginModels, userInfoList, out var user);
197 197 if (result != UserOperateResult.Success)
198 198 return result;
199 199 return user!.PermissionLevel < requiredPermissionLevel ? UserOperateResult.PermissionDenied : UserOperateResult.Success;
@@ -249,7 +249,7 @@ public static class UserHelper
249 249 /// <summary>
250 250 /// 校验权限(使用Session)
251 251 /// </summary>
252 /// <param name="sessionId"></param>
252 /// <param name="session"></param>
253 253 /// <param name="deviceInfo"></param>
254 254 /// <param name="ipAddress"></param>
255 255 /// <param name="requiredPermissionLevel"></param>
@@ -257,9 +257,9 @@ public static class UserHelper
257 257 /// <param name="userInfoList"></param>
258 258 /// <param name="r"></param>
259 259 /// <exception cref="StopAction"></exception>
260 public static void ValidatePermission(string? sessionId, string? deviceInfo, string ipAddress, int requiredPermissionLevel, IEnumerable<EncryptedUserLoginModel> encryptedUserLoginModels, IEnumerable<IUserInfo> userInfoList, ServerCoreReturnArgs r)
260 public static void ValidatePermission(string? session, string? deviceInfo, string ipAddress, int requiredPermissionLevel, IEnumerable<EncryptedUserLoginModel> encryptedUserLoginModels, IEnumerable<IUserInfo> userInfoList, ServerCoreReturnArgs r)
261 261 {
262 var result = ValidateUserPermission(sessionId, deviceInfo, ipAddress, requiredPermissionLevel, encryptedUserLoginModels, userInfoList);
262 var result = ValidateUserPermission(session, deviceInfo, ipAddress, requiredPermissionLevel, encryptedUserLoginModels, userInfoList);
263 263 if (result != UserOperateResult.Success)
264 264 throw r.Error(OutPutResult(result), HttpStatusCode.Forbidden);
265 265 }
Modified XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/ServerCoreUserServiceBase.cs +38 -1
@@ -2,13 +2,35 @@
2 2 using XFEExtension.NetCore.ServerInteractive.Implements.CoreService;
3 3 using XFEExtension.NetCore.ServerInteractive.Interfaces;
4 4 using XFEExtension.NetCore.ServerInteractive.Models.UserModels;
5 using XFEExtension.NetCore.ServerInteractive.Utilities.Helpers;
5 6 using XFEExtension.NetCore.ServerInteractive.Utilities.JsonConverter;
7 using XFEExtension.NetCore.StringExtension;
6 8
7 9 namespace XFEExtension.NetCore.ServerInteractive.Utilities.Server.Services.CoreService;
8 10
9 11 /// <inheritdoc cref="ServerCoreStandardServiceBase" />
10 12 public abstract class ServerCoreUserServiceBase : ServerCoreStandardServiceBase, IUserServiceBase
11 13 {
14 IUserInfo? _user;
15
16 /// <inheritdoc/>
17 public string? Session { get => Json > "session"; }
18 /// <inheritdoc/>
19 public string? DeviceInfo { get => Json > "deviceInfo"; }
20 /// <inheritdoc/>
21 public IUserInfo? User
22 {
23 get
24 {
25
26 if (_user is null)
27 {
28 var (_, _, user) = VerifyUserInfo();
29 _user = user;
30 }
31 return _user;
32 }
33 }
12 34 /// <inheritdoc/>
13 35 public Func<IEnumerable<IUserInfo>> GetUserFunction { get; set; } = () => [];
14 36 /// <inheritdoc/>
@@ -23,7 +45,22 @@ public abstract class ServerCoreUserServiceBase : ServerCoreStandardServiceBase,
23 45 public JsonSerializerOptions JsonSerializerOptions { get; set; } = new();
24 46 /// <inheritdoc/>
25 47 public Action<EncryptedUserLoginModel> RemoveEncryptedUserLoginModelFunction { get; set; } = _ => { };
26
27 48 /// <inheritdoc/>
28 49 protected ServerCoreUserServiceBase() => JsonSerializerOptions.Converters.Add(new JsonDateTimeConverter());
50
51 /// <inheritdoc/>
52 protected (string session, string deviceInfo, IUserInfo user) VerifyUserInfo()
53 {
54 string session = Json > "session" ?? throw Error("用户未登录");
55 string deviceInfo = Json > "deviceInfo" ?? throw Error("缺少电脑信息");
56 if (session.NullOrWhiteSpace) throw Error("用户未登录");
57 if (deviceInfo.NullOrWhiteSpace) throw Error("电脑信息不能为空");
58 var result = UserHelper.GetUser(session, deviceInfo, ClientIP, GetEncryptedUserLoginModelFunction(), GetUserFunction(), out var user);
59 return user is null ? throw Error(UserHelper.OutPutResult(result)) : (session, deviceInfo, user);
60 }
61
62 (string session, string deviceInfo, IUserInfo user) IUserServiceBase.VerifyUserInfo()
63 {
64 return VerifyUserInfo();
65 }
29 66 }
Modified XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj +7 -8
@@ -5,7 +5,7 @@
5 5 <ImplicitUsings>enable</ImplicitUsings>
6 6 <Nullable>enable</Nullable>
7 7 <GenerateDocumentationFile>True</GenerateDocumentationFile>
8 <Version>3.2.0-preview.1.0</Version>
8 <Version>3.2.0</Version>
9 9 <Title>XFEExtension.NetCore.ServerInteractive</Title>
10 10 <RepositoryUrl>https://github.com/XFEstudio/XFEExtension.NetCore.ServerInteractive</RepositoryUrl>
11 11 <AnalysisLevel>latest</AnalysisLevel>
@@ -21,14 +21,13 @@
21 21 <PackageReleaseNotes>
22 22 ## 调整
23 23
24 优化权限校验与日志输出逻辑
24 增强用户服务基类与权限校验逻辑,发布3.2.0
25 25
26 - 替换 `ValidatePermission` 方法中 `r.Args.ClientIP` 为 `r.ClientIP`。
27 - 增强 `XFEDataDictionaryTable` 和 `XFEDataListTable` 的异常处理,捕获 `ServerCoreReturnArgs`。
28 - 改进 `UserHelper.GetUser` 方法,增加 `session` 校验和日志输出。
29 - 增加 `IsSameIPAddress` 和 `FormatForLog` 辅助方法。
30 - 调整多个服务类中 `ClientIP` 的获取方式。
31 - 更新项目版本号至 `3.1.0`。
26 本次提交:
27 - IUserServiceBase 接口新增 Session、DeviceInfo、User 属性及 VerifyUserInfo 方法;
28 - UserHelper 工具类参数 sessionId 统一为 session,优化方法和注释;
29 - ServerCoreUserServiceBase 实现用户信息自动获取与校验;
30 - 项目版本号升级为 3.2.0,正式发布。
32 31
33 32 ## 新增
34 33