增加Shop API
This commit is contained in:
1 parent
3769193696
commit
5d017740c6
83 files changed
+4451
-696
No files matched your search
@@ -24,7 +24,6 @@ public sealed partial class UserManagementService(IFreeSql orm, ICurrentUser cur
|
||||
?? throw new UnauthorizedAccessException("登录账户不存在");
|
||||
}
|
||||
|
||||
private static bool IsAdmin(UserEntity actor) => UserAccessPolicy.IsAdmin(actor);
|
||||
/// <summary>仅本人、直属主账号或超级管理员可以读取账户详情。</summary>
|
||||
public async Task<UserInfo> GetUser(string? userName, CancellationToken ct)
|
||||
{
|
||||
@@ -33,7 +32,7 @@ public sealed partial class UserManagementService(IFreeSql orm, ICurrentUser cur
|
||||
RequestValidator.Validate(new UserNameRequest { UserName = name });
|
||||
var target = await orm.Select<UserEntity>().Where(u => u.UserName == name).FirstAsync(ct)
|
||||
?? throw new AppException("用户不存在");
|
||||
if (!UserAccessPolicy.CanRead(actor, target))
|
||||
if (!UserAccessPolicy.CanUseSelfService(actor, target))
|
||||
throw new AppException("无权访问该账户", 403);
|
||||
return await query.GetUser(target.UserName);
|
||||
}
|
||||
@@ -43,12 +42,12 @@ public sealed partial class UserManagementService(IFreeSql orm, ICurrentUser cur
|
||||
{
|
||||
RequestValidator.Validate(request);
|
||||
var actor = await Actor(orm, ct);
|
||||
if (!IsAdmin(actor) && !actor.IsMainUser) throw new AppException("子账号不能管理账户列表", 403);
|
||||
if (!UserAccessPolicy.IsAdmin(actor) && !actor.IsMainUser) throw new AppException("子账号不能管理账户列表", 403);
|
||||
var select = orm.Select<UserEntity>();
|
||||
if (subUsersOnly)
|
||||
{
|
||||
var parentUserName = request.ParentUserName?.Trim();
|
||||
if (IsAdmin(actor))
|
||||
if (UserAccessPolicy.IsAdmin(actor))
|
||||
{
|
||||
// 管理员省略父账号时查询所有子账号,但不混入主账号。
|
||||
select = select.Where(u => u.ParentUserName != null && u.ParentUserName.Trim() != "");
|
||||
@@ -63,7 +62,7 @@ public sealed partial class UserManagementService(IFreeSql orm, ICurrentUser cur
|
||||
select = select.Where(u => u.ParentUserName == actor.UserName && (u.SaLevel == null || u.SaLevel != UserAdminLevel.SuperAdmin));
|
||||
}
|
||||
}
|
||||
else if (!IsAdmin(actor))
|
||||
else if (!UserAccessPolicy.IsAdmin(actor))
|
||||
select = select.Where(u => u.Id == actor.Id || (u.ParentUserName == actor.UserName && (u.SaLevel == null || u.SaLevel != UserAdminLevel.SuperAdmin)));
|
||||
if (!subUsersOnly && !string.IsNullOrWhiteSpace(request.ParentUserName))
|
||||
{
|
||||
@@ -79,7 +78,8 @@ public sealed partial class UserManagementService(IFreeSql orm, ICurrentUser cur
|
||||
}
|
||||
var total = await select.CountAsync(ct);
|
||||
var items = await select.OrderByDescending(u => u.Id).Page(request.Page, request.PageSize).ToListAsync(ct);
|
||||
return new UserPage<UserInfo>(total, items.Select(u => new UserMapper().ToInfo(u)).ToList());
|
||||
var mapper = new UserMapper();
|
||||
return new UserPage<UserInfo>(total, items.Select(mapper.ToInfo).ToList());
|
||||
}
|
||||
|
||||
/// <summary>创建账户并初始化余额。主账号仅由管理员创建,子账号的归属由服务端指定。</summary>
|
||||
@@ -94,12 +94,12 @@ public sealed partial class UserManagementService(IFreeSql orm, ICurrentUser cur
|
||||
// 锁住主账号,使其创建子账号和删除操作串行化。
|
||||
actor = await db.Select<UserEntity>().Where(u => u.Id == actor.Id).ForUpdate().FirstAsync(ct)
|
||||
?? throw new AppException("操作者账户不存在");
|
||||
if (subUser ? !IsAdmin(actor) && !actor.IsMainUser : !IsAdmin(actor)) throw new AppException("无权创建该账户", 403);
|
||||
if (subUser ? !UserAccessPolicy.IsAdmin(actor) && !actor.IsMainUser : !UserAccessPolicy.IsAdmin(actor)) throw new AppException("无权创建该账户", 403);
|
||||
var parentName = "";
|
||||
if (subUser)
|
||||
{
|
||||
parentName = string.IsNullOrWhiteSpace(request.ParentUserName) ? actor.UserName : request.ParentUserName.Trim();
|
||||
if (!IsAdmin(actor) && !string.Equals(parentName, actor.UserName, StringComparison.OrdinalIgnoreCase))
|
||||
if (!UserAccessPolicy.IsAdmin(actor) && !string.Equals(parentName, actor.UserName, StringComparison.OrdinalIgnoreCase))
|
||||
throw new AppException("只能在自己的账户下创建子账号", 403);
|
||||
var parent = await db.Select<UserEntity>().Where(u => u.UserName == parentName).ForUpdate().FirstAsync(ct)
|
||||
?? throw new AppException("父账号不存在");
|
||||
@@ -186,7 +186,7 @@ public sealed partial class UserManagementService(IFreeSql orm, ICurrentUser cur
|
||||
var name = string.IsNullOrWhiteSpace(request.UserName) ? actor.UserName : request.UserName.Trim();
|
||||
var target = await orm.Select<UserEntity>().Where(u => u.UserName == name).FirstAsync(ct)
|
||||
?? throw new AppException("用户不存在");
|
||||
if (target.Id == actor.Id && !IsAdmin(actor))
|
||||
if (target.Id == actor.Id && !UserAccessPolicy.IsAdmin(actor))
|
||||
{
|
||||
RequestValidator.Validate(new UserPasswordProofRequest { OldPassword = request.OldPassword! });
|
||||
if (!UserPassword.Verify(target, request.OldPassword!)) throw new AppException("原密码错误");
|
||||
@@ -242,18 +242,18 @@ public sealed partial class UserManagementService(IFreeSql orm, ICurrentUser cur
|
||||
if (request.GroupId.HasValue && (subUser ? request.GroupId == UserGroup.MainAccount : request.GroupId != UserGroup.MainAccount))
|
||||
throw new AppException("主账号必须使用主号分组,子账号不能使用主号分组");
|
||||
// 普通主账号只能授予自己已有的权限,不能通过创建子账号提升权限。
|
||||
if (!IsAdmin(actor) && request.Authority != null)
|
||||
if (!UserAccessPolicy.IsAdmin(actor) && request.Authority != null)
|
||||
{
|
||||
var allowed = Split(actor.Authority);
|
||||
if (Split(request.Authority).Any(a => !allowed.Contains(a))) throw new AppException("不能授予超出自身范围的权限", 403);
|
||||
}
|
||||
if (!IsAdmin(actor) && (request.OemId != null || request.ShopPointsPerMonth != null
|
||||
if (!UserAccessPolicy.IsAdmin(actor) && (request.OemId != null || request.ShopPointsPerMonth != null
|
||||
|| request.PostagePerOrder != null || request.RefundPostagePerOrder != null
|
||||
|| request.GiftOemAmountPerOrder != null || request.SyncLogisticsPerOrder != null))
|
||||
throw new AppException("仅管理员可以修改计费配置", 403);
|
||||
if (request.SaLevel.HasValue)
|
||||
{
|
||||
if (!IsAdmin(actor)) throw new AppException("无权设置管理员级别", 403);
|
||||
if (!UserAccessPolicy.IsAdmin(actor)) throw new AppException("无权设置管理员级别", 403);
|
||||
user.SaLevel = request.SaLevel;
|
||||
}
|
||||
user.NickName = request.NickName?.Trim() ?? user.NickName;
|
||||
|
||||
Reference in new issue
Block a user