1.05 #7
@ -12,7 +12,7 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
|||||||
|
|
||||||
public async Task<RbacUserSnapshot?> GetUserSnapshotAsync(Guid userId, CancellationToken cancellationToken = default)
|
public async Task<RbacUserSnapshot?> GetUserSnapshotAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT
|
SELECT
|
||||||
u.`Id` AS `Id`,
|
u.`Id` AS `Id`,
|
||||||
u.`userid` AS `MapId`,
|
u.`userid` AS `MapId`,
|
||||||
@ -20,25 +20,25 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
|||||||
u.`Name` AS `Name`,
|
u.`Name` AS `Name`,
|
||||||
u.`OrganizationId` AS `OrganizationId`,
|
u.`OrganizationId` AS `OrganizationId`,
|
||||||
o.`Name` AS `OrganizationName`
|
o.`Name` AS `OrganizationName`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
LEFT JOIN `{{FakeTables.Organization}}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
LEFT JOIN `{FakeTables.Organization}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
||||||
WHERE u.`Id` = {0} AND u.`IsDeleted` = 0
|
WHERE u.`Id` = {{0}} AND u.`IsDeleted` = 0
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""";
|
";
|
||||||
return await Db.Database.SqlQueryRaw<RbacUserSnapshot>(sql, userId.ToString())
|
return await Db.Database.SqlQueryRaw<RbacUserSnapshot>(sql, userId.ToString())
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> IsPureCustomerUserAsync(Guid userId, CancellationToken cancellationToken = default)
|
public async Task<bool> IsPureCustomerUserAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT COUNT(*) AS `Value`
|
SELECT COUNT(*) AS `Value`
|
||||||
FROM `{{FakeTables.UserRole}}` ur
|
FROM `{FakeTables.UserRole}` ur
|
||||||
INNER JOIN `{{FakeTables.Role}}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
INNER JOIN `{FakeTables.Role}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||||
WHERE ur.`UserId` = {0}
|
WHERE ur.`UserId` = {{0}}
|
||||||
AND r.`Code` <> 'Customer'
|
AND r.`Code` <> 'Customer'
|
||||||
AND r.`Code` NOT LIKE 'CustomerSub_%'
|
AND r.`Code` NOT LIKE 'CustomerSub_%'
|
||||||
""";
|
";
|
||||||
|
|
||||||
var nonCustomerRoleCount = await Db.Database.SqlQueryRaw<int>(sql, userId.ToString())
|
var nonCustomerRoleCount = await Db.Database.SqlQueryRaw<int>(sql, userId.ToString())
|
||||||
.FirstAsync(cancellationToken);
|
.FirstAsync(cancellationToken);
|
||||||
@ -47,11 +47,11 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var hasRoleSql = $$"""
|
var hasRoleSql = $@"
|
||||||
SELECT COUNT(*) AS `Value`
|
SELECT COUNT(*) AS `Value`
|
||||||
FROM `{{FakeTables.UserRole}}` ur
|
FROM `{FakeTables.UserRole}` ur
|
||||||
WHERE ur.`UserId` = {0}
|
WHERE ur.`UserId` = {{0}}
|
||||||
""";
|
";
|
||||||
var roleCount = await Db.Database.SqlQueryRaw<int>(hasRoleSql, userId.ToString())
|
var roleCount = await Db.Database.SqlQueryRaw<int>(hasRoleSql, userId.ToString())
|
||||||
.FirstAsync(cancellationToken);
|
.FirstAsync(cancellationToken);
|
||||||
return roleCount > 0;
|
return roleCount > 0;
|
||||||
@ -59,13 +59,13 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
|||||||
|
|
||||||
public async Task<bool> IsAdminUserAsync(Guid userId, CancellationToken cancellationToken = default)
|
public async Task<bool> IsAdminUserAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT COUNT(*) AS `Value`
|
SELECT COUNT(*) AS `Value`
|
||||||
FROM `{{FakeTables.UserRole}}` ur
|
FROM `{FakeTables.UserRole}` ur
|
||||||
INNER JOIN `{{FakeTables.Role}}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
INNER JOIN `{FakeTables.Role}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||||
WHERE ur.`UserId` = {0}
|
WHERE ur.`UserId` = {{0}}
|
||||||
AND r.`Code` = 'Admin'
|
AND r.`Code` = 'Admin'
|
||||||
""";
|
";
|
||||||
|
|
||||||
var count = await Db.Database.SqlQueryRaw<int>(sql, userId.ToString()).FirstAsync(cancellationToken);
|
var count = await Db.Database.SqlQueryRaw<int>(sql, userId.ToString()).FirstAsync(cancellationToken);
|
||||||
return count > 0;
|
return count > 0;
|
||||||
@ -73,22 +73,22 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
|||||||
|
|
||||||
public async Task<List<Guid>> GetUserRoleIdsAsync(Guid userId, CancellationToken cancellationToken = default)
|
public async Task<List<Guid>> GetUserRoleIdsAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT ur.`RoleId` AS `Value`
|
SELECT ur.`RoleId` AS `Value`
|
||||||
FROM `{{FakeTables.UserRole}}` ur
|
FROM `{FakeTables.UserRole}` ur
|
||||||
WHERE ur.`UserId` = {0}
|
WHERE ur.`UserId` = {{0}}
|
||||||
""";
|
";
|
||||||
return await Db.Database.SqlQueryRaw<Guid>(sql, userId.ToString())
|
return await Db.Database.SqlQueryRaw<Guid>(sql, userId.ToString())
|
||||||
.ToListAsync(cancellationToken);
|
.ToListAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<List<Guid>> GetUserIdsByRoleAsync(Guid roleId, CancellationToken cancellationToken = default)
|
public async Task<List<Guid>> GetUserIdsByRoleAsync(Guid roleId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT ur.`UserId` AS `Value`
|
SELECT ur.`UserId` AS `Value`
|
||||||
FROM `{{FakeTables.UserRole}}` ur
|
FROM `{FakeTables.UserRole}` ur
|
||||||
WHERE ur.`RoleId` = {0}
|
WHERE ur.`RoleId` = {{0}}
|
||||||
""";
|
";
|
||||||
|
|
||||||
return await Db.Database.SqlQueryRaw<Guid>(sql, roleId.ToString())
|
return await Db.Database.SqlQueryRaw<Guid>(sql, roleId.ToString())
|
||||||
.ToListAsync(cancellationToken);
|
.ToListAsync(cancellationToken);
|
||||||
@ -382,19 +382,19 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
|||||||
|
|
||||||
public async Task<List<Guid>> GetOrganizationSubtreeIdsAsync(Guid rootOrganizationId, CancellationToken cancellationToken = default)
|
public async Task<List<Guid>> GetOrganizationSubtreeIdsAsync(Guid rootOrganizationId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
WITH RECURSIVE org_tree AS (
|
WITH RECURSIVE org_tree AS (
|
||||||
SELECT o.`Id`
|
SELECT o.`Id`
|
||||||
FROM `{{FakeTables.Organization}}` o
|
FROM `{FakeTables.Organization}` o
|
||||||
WHERE o.`Id` = {0} AND o.`IsDeleted` = 0
|
WHERE o.`Id` = {{0}} AND o.`IsDeleted` = 0
|
||||||
UNION ALL
|
UNION ALL
|
||||||
SELECT c.`Id`
|
SELECT c.`Id`
|
||||||
FROM `{{FakeTables.Organization}}` c
|
FROM `{FakeTables.Organization}` c
|
||||||
INNER JOIN org_tree t ON c.`ParentId` = t.`Id`
|
INNER JOIN org_tree t ON c.`ParentId` = t.`Id`
|
||||||
WHERE c.`IsDeleted` = 0
|
WHERE c.`IsDeleted` = 0
|
||||||
)
|
)
|
||||||
SELECT `Id` AS `Value` FROM org_tree
|
SELECT `Id` AS `Value` FROM org_tree
|
||||||
""";
|
";
|
||||||
|
|
||||||
return await Db.Database.SqlQueryRaw<Guid>(sql, rootOrganizationId.ToString())
|
return await Db.Database.SqlQueryRaw<Guid>(sql, rootOrganizationId.ToString())
|
||||||
.ToListAsync(cancellationToken);
|
.ToListAsync(cancellationToken);
|
||||||
@ -411,24 +411,24 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
|||||||
}
|
}
|
||||||
|
|
||||||
var inClause = string.Join(",", ids.Select(x => $"'{x}'"));
|
var inClause = string.Join(",", ids.Select(x => $"'{x}'"));
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT o.`Id` AS `Id`, o.`Name` AS `Name`
|
SELECT o.`Id` AS `Id`, o.`Name` AS `Name`
|
||||||
FROM `{{FakeTables.Organization}}` o
|
FROM `{FakeTables.Organization}` o
|
||||||
WHERE o.`IsDeleted` = 0
|
WHERE o.`IsDeleted` = 0
|
||||||
AND o.`Id` IN ({inClause})
|
AND o.`Id` IN ({inClause})
|
||||||
""";
|
";
|
||||||
var rows = await Db.Database.SqlQueryRaw<OrganizationNameRow>(sql).ToListAsync(cancellationToken);
|
var rows = await Db.Database.SqlQueryRaw<OrganizationNameRow>(sql).ToListAsync(cancellationToken);
|
||||||
return rows.ToDictionary(x => x.Id, x => x.Name ?? x.Id.ToString());
|
return rows.ToDictionary(x => x.Id, x => x.Name ?? x.Id.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
public async Task<bool> OrganizationExistsAndEnabledAsync(Guid organizationId, CancellationToken cancellationToken = default)
|
public async Task<bool> OrganizationExistsAndEnabledAsync(Guid organizationId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT COUNT(*) AS `Value`
|
SELECT COUNT(*) AS `Value`
|
||||||
FROM `{{FakeTables.Organization}}` o
|
FROM `{FakeTables.Organization}` o
|
||||||
WHERE o.`Id` = {0}
|
WHERE o.`Id` = {{0}}
|
||||||
AND o.`IsDeleted` = 0
|
AND o.`IsDeleted` = 0
|
||||||
""";
|
";
|
||||||
|
|
||||||
var count = await Db.Database.SqlQueryRaw<int>(sql, organizationId.ToString()).FirstAsync(cancellationToken);
|
var count = await Db.Database.SqlQueryRaw<int>(sql, organizationId.ToString()).FirstAsync(cancellationToken);
|
||||||
return count > 0;
|
return count > 0;
|
||||||
@ -446,12 +446,12 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
|||||||
|
|
||||||
if (dataScope == DataPermConstants.DataScopeTeam)
|
if (dataScope == DataPermConstants.DataScopeTeam)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT u.`userid` AS `Value`
|
SELECT u.`userid` AS `Value`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
WHERE u.`IsDeleted` = 0
|
WHERE u.`IsDeleted` = 0
|
||||||
AND u.`OrganizationId` = {0}
|
AND u.`OrganizationId` = {{0}}
|
||||||
""";
|
";
|
||||||
return await Db.Database.SqlQueryRaw<int>(sql, organizationId.ToString())
|
return await Db.Database.SqlQueryRaw<int>(sql, organizationId.ToString())
|
||||||
.ToListAsync(cancellationToken);
|
.ToListAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
@ -465,12 +465,12 @@ public class DataPermRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
|||||||
}
|
}
|
||||||
|
|
||||||
var inClause = string.Join(",", orgIds.Select(x => $"'{x}'"));
|
var inClause = string.Join(",", orgIds.Select(x => $"'{x}'"));
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT u.`userid` AS `Value`
|
SELECT u.`userid` AS `Value`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
WHERE u.`IsDeleted` = 0
|
WHERE u.`IsDeleted` = 0
|
||||||
AND u.`OrganizationId` IN ({inClause})
|
AND u.`OrganizationId` IN ({inClause})
|
||||||
""";
|
";
|
||||||
|
|
||||||
return await Db.Database.SqlQueryRaw<int>(sql).ToListAsync(cancellationToken);
|
return await Db.Database.SqlQueryRaw<int>(sql).ToListAsync(cancellationToken);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -21,21 +21,21 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
|||||||
|
|
||||||
public async Task<UserDataPermDto> GetUserDataPermAsync(Guid userId, CancellationToken cancellationToken = default)
|
public async Task<UserDataPermDto> GetUserDataPermAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var user = await dbContext.Database.SqlQueryRaw<UserHeaderRow>($$"""
|
var user = await dbContext.Database.SqlQueryRaw<UserHeaderRow>($@"
|
||||||
SELECT
|
SELECT
|
||||||
u.`Id` AS `UserId`,
|
u.`Id` AS `UserId`,
|
||||||
u.`Name` AS `UserName`,
|
u.`Name` AS `UserName`,
|
||||||
u.`OrganizationId` AS `OrganizationId`,
|
u.`OrganizationId` AS `OrganizationId`,
|
||||||
o.`Name` AS `OrganizationName`
|
o.`Name` AS `OrganizationName`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
LEFT JOIN `{{FakeTables.Organization}}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
LEFT JOIN `{FakeTables.Organization}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
||||||
WHERE u.`Id` = {0} AND u.`IsDeleted` = 0
|
WHERE u.`Id` = {{0}} AND u.`IsDeleted` = 0
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""", userId.ToString()).FirstOrDefaultAsync(cancellationToken)
|
", userId.ToString()).FirstOrDefaultAsync(cancellationToken)
|
||||||
?? throw new BusinessException("用户不存在");
|
?? throw new BusinessException("用户不存在");
|
||||||
|
|
||||||
var now = DateTime.UtcNow;
|
var now = DateTime.UtcNow;
|
||||||
var orgRows = await dbContext.Database.SqlQueryRaw<UserOrgPermRow>($$"""
|
var orgRows = await dbContext.Database.SqlQueryRaw<UserOrgPermRow>($@"
|
||||||
SELECT
|
SELECT
|
||||||
p.`Id` AS `Id`,
|
p.`Id` AS `Id`,
|
||||||
p.`OrganizationId` AS `OrganizationId`,
|
p.`OrganizationId` AS `OrganizationId`,
|
||||||
@ -45,11 +45,11 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
|||||||
p.`ExpireTime` AS `ExpireTime`,
|
p.`ExpireTime` AS `ExpireTime`,
|
||||||
p.`IsTemporary` AS `IsTemporary`
|
p.`IsTemporary` AS `IsTemporary`
|
||||||
FROM `user_org_perm` p
|
FROM `user_org_perm` p
|
||||||
LEFT JOIN `{{FakeTables.Organization}}` o ON o.`Id` = p.`OrganizationId` AND o.`IsDeleted` = 0
|
LEFT JOIN `{FakeTables.Organization}` o ON o.`Id` = p.`OrganizationId` AND o.`IsDeleted` = 0
|
||||||
WHERE p.`IsDeleted` = 0 AND p.`UserId` = {0}
|
WHERE p.`IsDeleted` = 0 AND p.`UserId` = {{0}}
|
||||||
""", userId.ToString()).ToListAsync(cancellationToken);
|
", userId.ToString()).ToListAsync(cancellationToken);
|
||||||
|
|
||||||
var scopeRows = await dbContext.Database.SqlQueryRaw<UserDataScopeRow>($"""
|
var scopeRows = await dbContext.Database.SqlQueryRaw<UserDataScopeRow>("""
|
||||||
SELECT p.`Id` AS `Id`, p.`DataScope` AS `DataScope`, p.`DataResourceCode` AS `DataResourceCode`, p.`ExpireTime` AS `ExpireTime`
|
SELECT p.`Id` AS `Id`, p.`DataScope` AS `DataScope`, p.`DataResourceCode` AS `DataResourceCode`, p.`ExpireTime` AS `ExpireTime`
|
||||||
FROM `user_data_scope` p
|
FROM `user_data_scope` p
|
||||||
WHERE p.`IsDeleted` = 0 AND p.`UserId` = {0}
|
WHERE p.`IsDeleted` = 0 AND p.`UserId` = {0}
|
||||||
@ -128,20 +128,20 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
|||||||
|
|
||||||
public async Task<RoleDataPermDto> GetRoleDataPermAsync(Guid roleId, CancellationToken cancellationToken = default)
|
public async Task<RoleDataPermDto> GetRoleDataPermAsync(Guid roleId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var role = await dbContext.Database.SqlQueryRaw<RoleHeaderRow>("""
|
var role = await dbContext.Database.SqlQueryRaw<RoleHeaderRow>($@"
|
||||||
SELECT r.`Id` AS `RoleId`, r.`Name` AS `RoleName`
|
SELECT r.`Id` AS `RoleId`, r.`Name` AS `RoleName`
|
||||||
FROM `{{FakeTables.Role}}` r
|
FROM `{FakeTables.Role}` r
|
||||||
WHERE r.`Id` = {0} AND r.`IsDeleted` = 0
|
WHERE r.`Id` = {{0}} AND r.`IsDeleted` = 0
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""", roleId.ToString()).FirstOrDefaultAsync(cancellationToken)
|
", roleId.ToString()).FirstOrDefaultAsync(cancellationToken)
|
||||||
?? throw new BusinessException("角色不存在");
|
?? throw new BusinessException("角色不存在");
|
||||||
|
|
||||||
var orgRows = await dbContext.Database.SqlQueryRaw<RoleOrgPermRow>($$"""
|
var orgRows = await dbContext.Database.SqlQueryRaw<RoleOrgPermRow>($@"
|
||||||
SELECT p.`Id` AS `Id`, p.`OrganizationId` AS `OrganizationId`, o.`Name` AS `OrganizationName`, p.`OrgScope` AS `OrgScope`
|
SELECT p.`Id` AS `Id`, p.`OrganizationId` AS `OrganizationId`, o.`Name` AS `OrganizationName`, p.`OrgScope` AS `OrgScope`
|
||||||
FROM `role_org_perm` p
|
FROM `role_org_perm` p
|
||||||
LEFT JOIN `{{FakeTables.Organization}}` o ON o.`Id` = p.`OrganizationId` AND o.`IsDeleted` = 0
|
LEFT JOIN `{FakeTables.Organization}` o ON o.`Id` = p.`OrganizationId` AND o.`IsDeleted` = 0
|
||||||
WHERE p.`IsDeleted` = 0 AND p.`RoleId` = {0}
|
WHERE p.`IsDeleted` = 0 AND p.`RoleId` = {{0}}
|
||||||
""", roleId.ToString()).ToListAsync(cancellationToken);
|
", roleId.ToString()).ToListAsync(cancellationToken);
|
||||||
|
|
||||||
var scopeRows = await dbContext.Database.SqlQueryRaw<RoleDataScopeRow>("""
|
var scopeRows = await dbContext.Database.SqlQueryRaw<RoleDataScopeRow>("""
|
||||||
SELECT p.`Id` AS `Id`, p.`DataScope` AS `DataScope`, p.`DataResourceCode` AS `DataResourceCode`
|
SELECT p.`Id` AS `Id`, p.`DataScope` AS `DataScope`, p.`DataResourceCode` AS `DataResourceCode`
|
||||||
@ -521,7 +521,7 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
|||||||
|
|
||||||
public async Task<List<FieldMaskItemDto>> GetFieldMasksAsync(string dataResourceCode, CancellationToken cancellationToken = default)
|
public async Task<List<FieldMaskItemDto>> GetFieldMasksAsync(string dataResourceCode, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $"""
|
var sql = """
|
||||||
SELECT m.`FieldName` AS `FieldName`, m.`SecretLevel` AS `SecretLevel`, m.`MaskType` AS `MaskType`, m.`MaskPattern` AS `MaskPattern`
|
SELECT m.`FieldName` AS `FieldName`, m.`SecretLevel` AS `SecretLevel`, m.`MaskType` AS `MaskType`, m.`MaskPattern` AS `MaskPattern`
|
||||||
FROM `data_perm_field_mask` m
|
FROM `data_perm_field_mask` m
|
||||||
WHERE m.`IsDeleted` = 0 AND m.`IsEnabled` = 1 AND m.`DataResourceCode` = {0}
|
WHERE m.`IsDeleted` = 0 AND m.`IsEnabled` = 1 AND m.`DataResourceCode` = {0}
|
||||||
@ -641,7 +641,7 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
|||||||
|
|
||||||
public async Task<DataPermTemplateDetailDto> GetTemplateDetailAsync(Guid templateId, CancellationToken cancellationToken = default)
|
public async Task<DataPermTemplateDetailDto> GetTemplateDetailAsync(Guid templateId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var headerSql = $"""
|
var headerSql = """
|
||||||
SELECT t.`Id` AS `Id`, t.`Name` AS `Name`, t.`Code` AS `Code`, t.`Description` AS `Description`,
|
SELECT t.`Id` AS `Id`, t.`Name` AS `Name`, t.`Code` AS `Code`, t.`Description` AS `Description`,
|
||||||
t.`RoleCode` AS `RoleCode`, t.`IsBuiltIn` AS `IsBuiltIn`
|
t.`RoleCode` AS `RoleCode`, t.`IsBuiltIn` AS `IsBuiltIn`
|
||||||
FROM `data_perm_template` t
|
FROM `data_perm_template` t
|
||||||
@ -653,7 +653,7 @@ public class DataPermStore(FakeRbacDbContext dbContext, DataPermContextCache cac
|
|||||||
.FirstOrDefaultAsync(cancellationToken)
|
.FirstOrDefaultAsync(cancellationToken)
|
||||||
?? throw new BusinessException("模板不存在");
|
?? throw new BusinessException("模板不存在");
|
||||||
|
|
||||||
var itemSql = $"""
|
var itemSql = """
|
||||||
SELECT i.`Id` AS `Id`, i.`DimensionType` AS `DimensionType`, CAST(i.`ItemContent` AS CHAR) AS `ItemContentJson`, i.`SortOrder` AS `SortOrder`
|
SELECT i.`Id` AS `Id`, i.`DimensionType` AS `DimensionType`, CAST(i.`ItemContent` AS CHAR) AS `ItemContentJson`, i.`SortOrder` AS `SortOrder`
|
||||||
FROM `data_perm_template_item` i
|
FROM `data_perm_template_item` i
|
||||||
WHERE i.`TemplateId` = {0} AND i.`IsDeleted` = 0
|
WHERE i.`TemplateId` = {0} AND i.`IsDeleted` = 0
|
||||||
|
|||||||
@ -42,17 +42,17 @@ public class CustomerServiceAdvisorResolver(FakeRbacDbContext dbContext) : IScop
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT
|
SELECT
|
||||||
u.`Name` AS `Name`,
|
u.`Name` AS `Name`,
|
||||||
u.`WechatId` AS `WechatId`,
|
u.`WechatId` AS `WechatId`,
|
||||||
u.`WechatQrCode` AS `WechatQrCode`,
|
u.`WechatQrCode` AS `WechatQrCode`,
|
||||||
u.`WecomKfUrl` AS `WecomKfUrl`
|
u.`WecomKfUrl` AS `WecomKfUrl`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
WHERE u.`IsDeleted` = 0
|
WHERE u.`IsDeleted` = 0
|
||||||
AND u.`userid` = {0}
|
AND u.`userid` = {{0}}
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""";
|
";
|
||||||
return await dbContext.Database
|
return await dbContext.Database
|
||||||
.SqlQueryRaw<AdvisorRow>(sql, userId)
|
.SqlQueryRaw<AdvisorRow>(sql, userId)
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
@ -60,18 +60,18 @@ public class CustomerServiceAdvisorResolver(FakeRbacDbContext dbContext) : IScop
|
|||||||
|
|
||||||
private async Task<AdvisorRow?> FindByNameOrAccountAsync(string key, CancellationToken cancellationToken)
|
private async Task<AdvisorRow?> FindByNameOrAccountAsync(string key, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT
|
SELECT
|
||||||
u.`Name` AS `Name`,
|
u.`Name` AS `Name`,
|
||||||
u.`WechatId` AS `WechatId`,
|
u.`WechatId` AS `WechatId`,
|
||||||
u.`WechatQrCode` AS `WechatQrCode`,
|
u.`WechatQrCode` AS `WechatQrCode`,
|
||||||
u.`WecomKfUrl` AS `WecomKfUrl`
|
u.`WecomKfUrl` AS `WecomKfUrl`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
WHERE u.`IsDeleted` = 0
|
WHERE u.`IsDeleted` = 0
|
||||||
AND (u.`Name` = {0} OR u.`Account` = {0})
|
AND (u.`Name` = {{0}} OR u.`Account` = {{0}})
|
||||||
ORDER BY u.`CreateTime` ASC
|
ORDER BY u.`CreateTime` ASC
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""";
|
";
|
||||||
|
|
||||||
return await dbContext.Database
|
return await dbContext.Database
|
||||||
.SqlQueryRaw<AdvisorRow>(sql, key)
|
.SqlQueryRaw<AdvisorRow>(sql, key)
|
||||||
|
|||||||
@ -8,19 +8,19 @@ namespace Oms.Application.Rbac;
|
|||||||
|
|
||||||
public class InternalUserRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
public class InternalUserRepository(FakeRbacDbContext dbContext) : IScopedDependency
|
||||||
{
|
{
|
||||||
private static readonly string InternalUserFilter = $$"""
|
private static readonly string InternalUserFilter = $@"
|
||||||
(
|
(
|
||||||
NOT EXISTS (SELECT 1 FROM `{{FakeTables.UserRole}}` ur0 WHERE ur0.`UserId` = u.`Id`)
|
NOT EXISTS (SELECT 1 FROM `{FakeTables.UserRole}` ur0 WHERE ur0.`UserId` = u.`Id`)
|
||||||
OR EXISTS (
|
OR EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
FROM `{{FakeTables.UserRole}}` ur
|
FROM `{FakeTables.UserRole}` ur
|
||||||
INNER JOIN `{{FakeTables.Role}}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
INNER JOIN `{FakeTables.Role}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||||
WHERE ur.`UserId` = u.`Id`
|
WHERE ur.`UserId` = u.`Id`
|
||||||
AND r.`Code` <> 'Customer'
|
AND r.`Code` <> 'Customer'
|
||||||
AND r.`Code` NOT LIKE 'CustomerSub\_%'
|
AND r.`Code` NOT LIKE 'CustomerSub\_%'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
""";
|
";
|
||||||
public async Task<InternalUserListResultDto> GetInternalUsersAsync(
|
public async Task<InternalUserListResultDto> GetInternalUsersAsync(
|
||||||
string? keyword,
|
string? keyword,
|
||||||
Guid? organizationId,
|
Guid? organizationId,
|
||||||
@ -45,16 +45,16 @@ public class InternalUserRepository(FakeRbacDbContext dbContext) : IScopedDepend
|
|||||||
args.Add(organizationId.Value.ToString());
|
args.Add(organizationId.Value.ToString());
|
||||||
}
|
}
|
||||||
|
|
||||||
var countSql = $$"""
|
var countSql = $@"
|
||||||
SELECT COUNT(*) AS `Value`
|
SELECT COUNT(*) AS `Value`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
{where}
|
{where}
|
||||||
""";
|
";
|
||||||
var total = await dbContext.Database.SqlQueryRaw<long>(countSql, args.ToArray())
|
var total = await dbContext.Database.SqlQueryRaw<long>(countSql, args.ToArray())
|
||||||
.FirstAsync(cancellationToken);
|
.FirstAsync(cancellationToken);
|
||||||
|
|
||||||
var offset = Math.Max(page - 1, 0) * pageSize;
|
var offset = Math.Max(page - 1, 0) * pageSize;
|
||||||
var listSql = $$"""
|
var listSql = $@"
|
||||||
SELECT
|
SELECT
|
||||||
u.`Id` AS `Id`,
|
u.`Id` AS `Id`,
|
||||||
u.`Name` AS `Name`,
|
u.`Name` AS `Name`,
|
||||||
@ -67,12 +67,12 @@ public class InternalUserRepository(FakeRbacDbContext dbContext) : IScopedDepend
|
|||||||
u.`OrganizationId` AS `OrganizationId`,
|
u.`OrganizationId` AS `OrganizationId`,
|
||||||
o.`Name` AS `OrganizationName`,
|
o.`Name` AS `OrganizationName`,
|
||||||
u.`CreateTime` AS `CreatedAt`
|
u.`CreateTime` AS `CreatedAt`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
LEFT JOIN `{{FakeTables.Organization}}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
LEFT JOIN `{FakeTables.Organization}` o ON o.`Id` = u.`OrganizationId` AND o.`IsDeleted` = 0
|
||||||
{where}
|
{where}
|
||||||
ORDER BY u.`CreateTime` DESC
|
ORDER BY u.`CreateTime` DESC
|
||||||
LIMIT {pageSize} OFFSET {offset}
|
LIMIT {pageSize} OFFSET {offset}
|
||||||
""";
|
";
|
||||||
var rows = await dbContext.Database.SqlQueryRaw<InternalUserRow>(listSql, args.ToArray())
|
var rows = await dbContext.Database.SqlQueryRaw<InternalUserRow>(listSql, args.ToArray())
|
||||||
.ToListAsync(cancellationToken);
|
.ToListAsync(cancellationToken);
|
||||||
if (rows.Count == 0)
|
if (rows.Count == 0)
|
||||||
@ -111,17 +111,17 @@ public class InternalUserRepository(FakeRbacDbContext dbContext) : IScopedDepend
|
|||||||
}
|
}
|
||||||
|
|
||||||
var inClause = string.Join(",", userIds.Select(x => $"'{x}'"));
|
var inClause = string.Join(",", userIds.Select(x => $"'{x}'"));
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT
|
SELECT
|
||||||
ur.`UserId` AS `UserId`,
|
ur.`UserId` AS `UserId`,
|
||||||
r.`Id` AS `RoleId`,
|
r.`Id` AS `RoleId`,
|
||||||
r.`Name` AS `RoleName`,
|
r.`Name` AS `RoleName`,
|
||||||
r.`Code` AS `RoleCode`
|
r.`Code` AS `RoleCode`
|
||||||
FROM `{{FakeTables.UserRole}}` ur
|
FROM `{FakeTables.UserRole}` ur
|
||||||
INNER JOIN `{{FakeTables.Role}}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
INNER JOIN `{FakeTables.Role}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||||
WHERE ur.`UserId` IN ({inClause})
|
WHERE ur.`UserId` IN ({inClause})
|
||||||
ORDER BY r.`Name`
|
ORDER BY r.`Name`
|
||||||
""";
|
";
|
||||||
|
|
||||||
var roleRows = await dbContext.Database.SqlQueryRaw<UserRoleRow>(sql).ToListAsync(cancellationToken);
|
var roleRows = await dbContext.Database.SqlQueryRaw<UserRoleRow>(sql).ToListAsync(cancellationToken);
|
||||||
return roleRows
|
return roleRows
|
||||||
|
|||||||
@ -16,17 +16,17 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
|||||||
|
|
||||||
public async Task<UserProfileData?> GetAsync(Guid userId, CancellationToken cancellationToken = default)
|
public async Task<UserProfileData?> GetAsync(Guid userId, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT
|
SELECT
|
||||||
u.`Phone` AS `Phone`,
|
u.`Phone` AS `Phone`,
|
||||||
u.`EmployeeNo` AS `EmployeeNo`,
|
u.`EmployeeNo` AS `EmployeeNo`,
|
||||||
u.`WechatId` AS `WechatId`,
|
u.`WechatId` AS `WechatId`,
|
||||||
u.`WechatQrCode` AS `WechatQrCode`,
|
u.`WechatQrCode` AS `WechatQrCode`,
|
||||||
u.`WecomKfUrl` AS `WecomKfUrl`
|
u.`WecomKfUrl` AS `WecomKfUrl`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
WHERE u.`Id` = {0} AND u.`IsDeleted` = 0
|
WHERE u.`Id` = {{0}} AND u.`IsDeleted` = 0
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""";
|
";
|
||||||
var row = await dbContext.Database
|
var row = await dbContext.Database
|
||||||
.SqlQueryRaw<UserProfileRow>(sql, userId.ToString())
|
.SqlQueryRaw<UserProfileRow>(sql, userId.ToString())
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
@ -56,7 +56,7 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
|||||||
}
|
}
|
||||||
|
|
||||||
var inClause = string.Join(",", userIds.Select(x => $"'{x}'"));
|
var inClause = string.Join(",", userIds.Select(x => $"'{x}'"));
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT
|
SELECT
|
||||||
u.`Id` AS `UserId`,
|
u.`Id` AS `UserId`,
|
||||||
u.`Phone` AS `Phone`,
|
u.`Phone` AS `Phone`,
|
||||||
@ -64,9 +64,9 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
|||||||
u.`WechatId` AS `WechatId`,
|
u.`WechatId` AS `WechatId`,
|
||||||
u.`WechatQrCode` AS `WechatQrCode`,
|
u.`WechatQrCode` AS `WechatQrCode`,
|
||||||
u.`WecomKfUrl` AS `WecomKfUrl`
|
u.`WecomKfUrl` AS `WecomKfUrl`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
WHERE u.`Id` IN ({inClause}) AND u.`IsDeleted` = 0
|
WHERE u.`Id` IN ({inClause}) AND u.`IsDeleted` = 0
|
||||||
""";
|
";
|
||||||
|
|
||||||
var rows = await dbContext.Database.SqlQueryRaw<UserProfileListRow>(sql).ToListAsync(cancellationToken);
|
var rows = await dbContext.Database.SqlQueryRaw<UserProfileListRow>(sql).ToListAsync(cancellationToken);
|
||||||
return rows.ToDictionary(
|
return rows.ToDictionary(
|
||||||
@ -83,16 +83,16 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
|||||||
|
|
||||||
public async Task SaveAsync(Guid userId, UserProfileData profile, CancellationToken cancellationToken = default)
|
public async Task SaveAsync(Guid userId, UserProfileData profile, CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
UPDATE `{{FakeTables.User}}`
|
UPDATE `{FakeTables.User}`
|
||||||
SET
|
SET
|
||||||
`Phone` = {1},
|
`Phone` = {{1}},
|
||||||
`EmployeeNo` = {2},
|
`EmployeeNo` = {{2}},
|
||||||
`WechatId` = {3},
|
`WechatId` = {{3}},
|
||||||
`WechatQrCode` = {4},
|
`WechatQrCode` = {{4}},
|
||||||
`WecomKfUrl` = {5}
|
`WecomKfUrl` = {{5}}
|
||||||
WHERE `Id` = {0} AND `IsDeleted` = 0
|
WHERE `Id` = {{0}} AND `IsDeleted` = 0
|
||||||
""";
|
";
|
||||||
await dbContext.Database.ExecuteSqlRawAsync(
|
await dbContext.Database.ExecuteSqlRawAsync(
|
||||||
sql,
|
sql,
|
||||||
[
|
[
|
||||||
@ -112,15 +112,15 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
|||||||
UserProfileData profile,
|
UserProfileData profile,
|
||||||
CancellationToken cancellationToken = default)
|
CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
UPDATE `{{FakeTables.User}}`
|
UPDATE `{FakeTables.User}`
|
||||||
SET
|
SET
|
||||||
`Phone` = {1},
|
`Phone` = {{1}},
|
||||||
`WechatId` = {2},
|
`WechatId` = {{2}},
|
||||||
`WechatQrCode` = {3},
|
`WechatQrCode` = {{3}},
|
||||||
`WecomKfUrl` = {4}
|
`WecomKfUrl` = {{4}}
|
||||||
WHERE `Id` = {0} AND `IsDeleted` = 0
|
WHERE `Id` = {{0}} AND `IsDeleted` = 0
|
||||||
""";
|
";
|
||||||
|
|
||||||
await dbContext.Database.ExecuteSqlRawAsync(
|
await dbContext.Database.ExecuteSqlRawAsync(
|
||||||
sql,
|
sql,
|
||||||
@ -141,19 +141,19 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
|||||||
{
|
{
|
||||||
var normalized = employeeNo.Trim().ToUpperInvariant();
|
var normalized = employeeNo.Trim().ToUpperInvariant();
|
||||||
var sql = excludeUserId.HasValue
|
var sql = excludeUserId.HasValue
|
||||||
? $$"""
|
? $@"
|
||||||
SELECT COUNT(*) AS `Value`
|
SELECT COUNT(*) AS `Value`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
WHERE u.`IsDeleted` = 0
|
WHERE u.`IsDeleted` = 0
|
||||||
AND u.`EmployeeNo` = {0}
|
AND u.`EmployeeNo` = {{0}}
|
||||||
AND u.`Id` <> {1}
|
AND u.`Id` <> {{1}}
|
||||||
"""
|
"
|
||||||
: $$"""
|
: $@"
|
||||||
SELECT COUNT(*) AS `Value`
|
SELECT COUNT(*) AS `Value`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
WHERE u.`IsDeleted` = 0
|
WHERE u.`IsDeleted` = 0
|
||||||
AND u.`EmployeeNo` = {0}
|
AND u.`EmployeeNo` = {{0}}
|
||||||
""";
|
";
|
||||||
|
|
||||||
var count = excludeUserId.HasValue
|
var count = excludeUserId.HasValue
|
||||||
? await dbContext.Database.SqlQueryRaw<long>(sql, normalized, excludeUserId.Value.ToString())
|
? await dbContext.Database.SqlQueryRaw<long>(sql, normalized, excludeUserId.Value.ToString())
|
||||||
@ -165,13 +165,13 @@ public class UserProfileRepository(FakeRbacDbContext dbContext) : IScopedDepende
|
|||||||
|
|
||||||
public async Task<string> GenerateNextEmployeeNoAsync(CancellationToken cancellationToken = default)
|
public async Task<string> GenerateNextEmployeeNoAsync(CancellationToken cancellationToken = default)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT u.`EmployeeNo` AS `EmployeeNo`
|
SELECT u.`EmployeeNo` AS `EmployeeNo`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
WHERE u.`IsDeleted` = 0
|
WHERE u.`IsDeleted` = 0
|
||||||
AND u.`EmployeeNo` IS NOT NULL
|
AND u.`EmployeeNo` IS NOT NULL
|
||||||
AND u.`EmployeeNo` <> ''
|
AND u.`EmployeeNo` <> ''
|
||||||
""";
|
";
|
||||||
|
|
||||||
var rows = await dbContext.Database.SqlQueryRaw<EmployeeNoRow>(sql).ToListAsync(cancellationToken);
|
var rows = await dbContext.Database.SqlQueryRaw<EmployeeNoRow>(sql).ToListAsync(cancellationToken);
|
||||||
var max = 0;
|
var max = 0;
|
||||||
|
|||||||
@ -25,19 +25,19 @@ public class NoticeService : ApplicationService
|
|||||||
private const string ReceiverTypeUser = "user";
|
private const string ReceiverTypeUser = "user";
|
||||||
private const string ReceiverTypeCustomer = "customer";
|
private const string ReceiverTypeCustomer = "customer";
|
||||||
|
|
||||||
private static readonly string InternalUserFilter = $$"""
|
private static readonly string InternalUserFilter = $@"
|
||||||
(
|
(
|
||||||
NOT EXISTS (SELECT 1 FROM `{{FakeTables.UserRole}}` ur0 WHERE ur0.`UserId` = u.`Id`)
|
NOT EXISTS (SELECT 1 FROM `{FakeTables.UserRole}` ur0 WHERE ur0.`UserId` = u.`Id`)
|
||||||
OR EXISTS (
|
OR EXISTS (
|
||||||
SELECT 1
|
SELECT 1
|
||||||
FROM `{{FakeTables.UserRole}}` ur
|
FROM `{FakeTables.UserRole}` ur
|
||||||
INNER JOIN `{{FakeTables.Role}}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
INNER JOIN `{FakeTables.Role}` r ON r.`Id` = ur.`RoleId` AND r.`IsDeleted` = 0
|
||||||
WHERE ur.`UserId` = u.`Id`
|
WHERE ur.`UserId` = u.`Id`
|
||||||
AND r.`Code` <> 'Customer'
|
AND r.`Code` <> 'Customer'
|
||||||
AND r.`Code` NOT LIKE 'CustomerSub\_%'
|
AND r.`Code` NOT LIKE 'CustomerSub\_%'
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
""";
|
";
|
||||||
private INoticeRepository NoticeRepository => LazyServiceProvider.GetRequiredService<INoticeRepository>();
|
private INoticeRepository NoticeRepository => LazyServiceProvider.GetRequiredService<INoticeRepository>();
|
||||||
private INoticeReadRepository NoticeReadRepository => LazyServiceProvider.GetRequiredService<INoticeReadRepository>();
|
private INoticeReadRepository NoticeReadRepository => LazyServiceProvider.GetRequiredService<INoticeReadRepository>();
|
||||||
private ICustomerRepository CustomerRepository => LazyServiceProvider.GetRequiredService<ICustomerRepository>();
|
private ICustomerRepository CustomerRepository => LazyServiceProvider.GetRequiredService<ICustomerRepository>();
|
||||||
@ -239,19 +239,19 @@ public class NoticeService : ApplicationService
|
|||||||
args.Add(pattern);
|
args.Add(pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
var countSql = $"SELECT COUNT(*) AS `Value` FROM `{{FakeTables.User}}` u {where}";
|
var countSql = $"SELECT COUNT(*) AS `Value` FROM `{FakeTables.User}` u {where}";
|
||||||
var total = await RbacDbContext.Database.SqlQueryRaw<long>(countSql, args.ToArray()).FirstAsync();
|
var total = await RbacDbContext.Database.SqlQueryRaw<long>(countSql, args.ToArray()).FirstAsync();
|
||||||
var offset = Math.Max(pageIndex - 1, 0) * pageSize;
|
var offset = Math.Max(pageIndex - 1, 0) * pageSize;
|
||||||
var listSql = $$"""
|
var listSql = $@"
|
||||||
SELECT
|
SELECT
|
||||||
u.`userid` AS `Value`,
|
u.`userid` AS `Value`,
|
||||||
u.`Name` AS `Label`,
|
u.`Name` AS `Label`,
|
||||||
u.`Account` AS `Extra`
|
u.`Account` AS `Extra`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
{where}
|
{where}
|
||||||
ORDER BY u.`Name`, u.`userid`
|
ORDER BY u.`Name`, u.`userid`
|
||||||
LIMIT {pageSize} OFFSET {offset}
|
LIMIT {pageSize} OFFSET {offset}
|
||||||
""";
|
";
|
||||||
var items = await RbacDbContext.Database.SqlQueryRaw<NoticeReceiverOptionRow>(listSql, args.ToArray())
|
var items = await RbacDbContext.Database.SqlQueryRaw<NoticeReceiverOptionRow>(listSql, args.ToArray())
|
||||||
.Select(x => new NoticeReceiverOptionOutput
|
.Select(x => new NoticeReceiverOptionOutput
|
||||||
{
|
{
|
||||||
@ -465,7 +465,7 @@ public class NoticeService : ApplicationService
|
|||||||
return [];
|
return [];
|
||||||
}
|
}
|
||||||
|
|
||||||
var sql = $"SELECT `userid` AS `UserId` FROM `{{FakeTables.User}}` WHERE `IsDeleted` = 0 AND `userid` IN ({string.Join(",", userIds)})";
|
var sql = $"SELECT `userid` AS `UserId` FROM `{FakeTables.User}` WHERE `IsDeleted` = 0 AND `userid` IN ({string.Join(",", userIds)})";
|
||||||
return await RbacDbContext.Database.SqlQueryRaw<UserIdQueryResult>(sql)
|
return await RbacDbContext.Database.SqlQueryRaw<UserIdQueryResult>(sql)
|
||||||
.Select(x => x.UserId)
|
.Select(x => x.UserId)
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
|
|||||||
@ -169,12 +169,12 @@ public static class OmsRbacRegistrationGuard
|
|||||||
|
|
||||||
var hit = await rbacDbContext.Database
|
var hit = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<int?>(
|
.SqlQueryRaw<int?>(
|
||||||
$$"""
|
$@"
|
||||||
SELECT 1 AS Value
|
SELECT 1 AS Value
|
||||||
FROM `{{FakeTables.Organization}}`
|
FROM `{FakeTables.Organization}`
|
||||||
WHERE `Id` = {0} AND `IsDeleted` = 0
|
WHERE `Id` = {{0}} AND `IsDeleted` = 0
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""", organizationId.Value.ToString())
|
", organizationId.Value.ToString())
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
|
|
||||||
if (!hit.HasValue)
|
if (!hit.HasValue)
|
||||||
@ -203,12 +203,12 @@ public static class OmsRbacRegistrationGuard
|
|||||||
{
|
{
|
||||||
var hit = await rbacDbContext.Database
|
var hit = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<int?>(
|
.SqlQueryRaw<int?>(
|
||||||
$$"""
|
$@"
|
||||||
SELECT 1 AS Value
|
SELECT 1 AS Value
|
||||||
FROM `{{FakeTables.Role}}`
|
FROM `{FakeTables.Role}`
|
||||||
WHERE `Id` = {0} AND `IsDeleted` = 0
|
WHERE `Id` = {{0}} AND `IsDeleted` = 0
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""", roleId.ToString())
|
", roleId.ToString())
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
|
|
||||||
if (!hit.HasValue)
|
if (!hit.HasValue)
|
||||||
@ -494,7 +494,7 @@ public static class OmsRbacRegistrationGuard
|
|||||||
{
|
{
|
||||||
var hit = await rbacDbContext.Database
|
var hit = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<int?>(
|
.SqlQueryRaw<int?>(
|
||||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Account` = {0} AND `Id` <> {1} LIMIT 1",
|
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Account` = {{0}} AND `Id` <> {{1}} LIMIT 1",
|
||||||
account, id.ToString())
|
account, id.ToString())
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
return hit.HasValue;
|
return hit.HasValue;
|
||||||
@ -502,7 +502,7 @@ public static class OmsRbacRegistrationGuard
|
|||||||
|
|
||||||
var any = await rbacDbContext.Database
|
var any = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<int?>(
|
.SqlQueryRaw<int?>(
|
||||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Account` = {0} LIMIT 1", account)
|
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Account` = {{0}} LIMIT 1", account)
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
return any.HasValue;
|
return any.HasValue;
|
||||||
}
|
}
|
||||||
@ -517,7 +517,7 @@ public static class OmsRbacRegistrationGuard
|
|||||||
{
|
{
|
||||||
var hit = await rbacDbContext.Database
|
var hit = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<int?>(
|
.SqlQueryRaw<int?>(
|
||||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Email` = {0} AND `Id` <> {1} LIMIT 1",
|
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Email` = {{0}} AND `Id` <> {{1}} LIMIT 1",
|
||||||
email, id.ToString())
|
email, id.ToString())
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
return hit.HasValue;
|
return hit.HasValue;
|
||||||
@ -525,7 +525,7 @@ public static class OmsRbacRegistrationGuard
|
|||||||
|
|
||||||
var any = await rbacDbContext.Database
|
var any = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<int?>(
|
.SqlQueryRaw<int?>(
|
||||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Email` = {0} LIMIT 1", email)
|
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Email` = {{0}} LIMIT 1", email)
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
return any.HasValue;
|
return any.HasValue;
|
||||||
}
|
}
|
||||||
@ -540,7 +540,7 @@ public static class OmsRbacRegistrationGuard
|
|||||||
{
|
{
|
||||||
var hit = await rbacDbContext.Database
|
var hit = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<int?>(
|
.SqlQueryRaw<int?>(
|
||||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Phone` = {0} AND `Id` <> {1} LIMIT 1",
|
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Phone` = {{0}} AND `Id` <> {{1}} LIMIT 1",
|
||||||
phone, id.ToString())
|
phone, id.ToString())
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
return hit.HasValue;
|
return hit.HasValue;
|
||||||
@ -548,7 +548,7 @@ public static class OmsRbacRegistrationGuard
|
|||||||
|
|
||||||
var any = await rbacDbContext.Database
|
var any = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<int?>(
|
.SqlQueryRaw<int?>(
|
||||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `Phone` = {0} LIMIT 1", phone)
|
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `Phone` = {{0}} LIMIT 1", phone)
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
return any.HasValue;
|
return any.HasValue;
|
||||||
}
|
}
|
||||||
@ -563,7 +563,7 @@ public static class OmsRbacRegistrationGuard
|
|||||||
{
|
{
|
||||||
var hit = await rbacDbContext.Database
|
var hit = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<int?>(
|
.SqlQueryRaw<int?>(
|
||||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `WechatId` = {0} AND `Id` <> {1} LIMIT 1",
|
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `WechatId` = {{0}} AND `Id` <> {{1}} LIMIT 1",
|
||||||
wechatId, id.ToString())
|
wechatId, id.ToString())
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
return hit.HasValue;
|
return hit.HasValue;
|
||||||
@ -571,7 +571,7 @@ public static class OmsRbacRegistrationGuard
|
|||||||
|
|
||||||
var any = await rbacDbContext.Database
|
var any = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<int?>(
|
.SqlQueryRaw<int?>(
|
||||||
$"SELECT 1 AS Value FROM `{{FakeTables.User}}` WHERE `WechatId` = {0} LIMIT 1", wechatId)
|
$"SELECT 1 AS Value FROM `{FakeTables.User}` WHERE `WechatId` = {{0}} LIMIT 1", wechatId)
|
||||||
.FirstOrDefaultAsync(cancellationToken);
|
.FirstOrDefaultAsync(cancellationToken);
|
||||||
return any.HasValue;
|
return any.HasValue;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -45,14 +45,14 @@ public static class StaffAdvisorBinder
|
|||||||
string key,
|
string key,
|
||||||
CancellationToken cancellationToken)
|
CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var sql = $$"""
|
var sql = $@"
|
||||||
SELECT u.`Account` AS `Account`
|
SELECT u.`Account` AS `Account`
|
||||||
FROM `{{FakeTables.User}}` u
|
FROM `{FakeTables.User}` u
|
||||||
WHERE u.`IsDeleted` = 0
|
WHERE u.`IsDeleted` = 0
|
||||||
AND u.`Account` = {0}
|
AND u.`Account` = {{0}}
|
||||||
ORDER BY u.`CreateTime` ASC
|
ORDER BY u.`CreateTime` ASC
|
||||||
LIMIT 1
|
LIMIT 1
|
||||||
""";
|
";
|
||||||
|
|
||||||
var row = await rbacDbContext.Database
|
var row = await rbacDbContext.Database
|
||||||
.SqlQueryRaw<AccountRow>(sql, key)
|
.SqlQueryRaw<AccountRow>(sql, key)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user