XFEExtension.NetCore.ServerInteractive
[DLL] Server interaction extension, including user identity verification and querying in conjunction with AutoConfig
关注
0
Fork
0
Star
0
返回提交历史
Modified
XFEExtension.NetCore.ServerInteractive.TServer/Services/TestCoreService.cs
+3
-2
Modified
XFEExtension.NetCore.ServerInteractive/Interfaces/IUserServiceBase.cs
+18
-0
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Helpers/UserHelper.cs
+7
-7
Modified
XFEExtension.NetCore.ServerInteractive/Utilities/Server/Services/CoreService/ServerCoreUserServiceBase.cs
+38
-1
Modified
XFEExtension.NetCore.ServerInteractive/XFEExtension.NetCore.ServerInteractive.csproj
+7
-8
XFEstudio/XFEExtension.NetCore.ServerInteractive
增强用户服务基类与权限校验逻辑,发布3.2.0
本次提交: - 将 TestCoreService 基类切换为 ServerCoreUserServiceBase,并调整命名空间; - IUserServiceBase 接口新增 Session、DeviceInfo、User 属性及 VerifyUserInfo 方法; - UserHelper 工具类参数 sessionId 统一为 session,优化方法和注释; - ServerCoreUserServiceBase 实现用户信息自动获取与校验; - 项目版本号升级为 3.2.0,正式发布。
eb8656f
代码差异
5 个文件
+73
-18
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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
}
@@ -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