simplify level update so we don't have to worry about linked account levels
This commit is contained in:
parent
58d48a211e
commit
e9c8ead829
@ -597,51 +597,16 @@ namespace SharedLibraryCore.Services
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public virtual async Task UpdateLevel(Permission newPermission, EFClient temporalClient, EFClient origin)
|
public virtual async Task UpdateLevel(Permission newPermission, EFClient temporalClient, EFClient origin)
|
||||||
{
|
{
|
||||||
await using var ctx = _contextFactory.CreateContext();
|
await using var context = _contextFactory.CreateContext();
|
||||||
var entity = await ctx.Clients
|
var entity = await context.Clients
|
||||||
.Where(_client => _client.ClientId == temporalClient.ClientId)
|
.Where(client => client.ClientId == temporalClient.ClientId)
|
||||||
.FirstAsync();
|
.FirstAsync();
|
||||||
|
|
||||||
var oldPermission = entity.Level;
|
_logger.LogInformation("Updating {ClientId} from {OldPermission} to {NewPermission} ",
|
||||||
|
temporalClient.ClientId, entity.Level, newPermission);
|
||||||
|
|
||||||
entity.Level = newPermission;
|
entity.Level = newPermission;
|
||||||
await ctx.SaveChangesAsync();
|
await context.SaveChangesAsync();
|
||||||
|
|
||||||
using (LogContext.PushProperty("Server", temporalClient?.CurrentServer?.ToString()))
|
|
||||||
{
|
|
||||||
_logger.LogInformation("Updated {clientId} to {newPermission}", temporalClient.ClientId, newPermission);
|
|
||||||
|
|
||||||
var linkedPermissionSet = new[] { Permission.Banned, Permission.Flagged };
|
|
||||||
// if their permission level has been changed to level that needs to be updated on all accounts
|
|
||||||
if (linkedPermissionSet.Contains(newPermission) || linkedPermissionSet.Contains(oldPermission))
|
|
||||||
{
|
|
||||||
//get all clients that have the same linkId
|
|
||||||
var iqMatchingClients = ctx.Clients
|
|
||||||
.Where(_client => _client.AliasLinkId == entity.AliasLinkId);
|
|
||||||
|
|
||||||
var iqLinkClients = new List<Data.Models.Client.EFClient>().AsQueryable();
|
|
||||||
if (!_appConfig.EnableImplicitAccountLinking)
|
|
||||||
{
|
|
||||||
var linkIds = await ctx.Aliases.Where(alias =>
|
|
||||||
alias.IPAddress != null && alias.IPAddress == temporalClient.IPAddress)
|
|
||||||
.Select(alias => alias.LinkId)
|
|
||||||
.ToListAsync();
|
|
||||||
iqLinkClients = ctx.Clients.Where(client => linkIds.Contains(client.AliasLinkId));
|
|
||||||
}
|
|
||||||
|
|
||||||
// this updates the level for all the clients with the same LinkId
|
|
||||||
// only if their new level is flagged or banned
|
|
||||||
await iqMatchingClients.Union(iqLinkClients).ForEachAsync(_client =>
|
|
||||||
{
|
|
||||||
_client.Level = newPermission;
|
|
||||||
_logger.LogInformation("Updated linked {clientId} to {newPermission}", _client.ClientId,
|
|
||||||
newPermission);
|
|
||||||
});
|
|
||||||
|
|
||||||
await ctx.SaveChangesAsync();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
temporalClient.Level = newPermission;
|
temporalClient.Level = newPermission;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,6 +53,14 @@ namespace WebfrontCore.Controllers
|
|||||||
client.SetAdditionalProperty(EFMeta.ClientTag, tag.LinkedMeta.Value);
|
client.SetAdditionalProperty(EFMeta.ClientTag, tag.LinkedMeta.Value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// even though we haven't set their level to "banned" yet
|
||||||
|
// (ie they haven't reconnected with the infringing player identifier)
|
||||||
|
// we want to show them as banned as to not confuse people.
|
||||||
|
if (activePenalties.Any(penalty => penalty.Type == EFPenalty.PenaltyType.Ban))
|
||||||
|
{
|
||||||
|
client.Level = Data.Models.Client.EFClient.Permission.Banned;
|
||||||
|
}
|
||||||
|
|
||||||
var displayLevelInt = (int)client.Level;
|
var displayLevelInt = (int)client.Level;
|
||||||
var displayLevel = client.Level.ToLocalizedLevelName();
|
var displayLevel = client.Level.ToLocalizedLevelName();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user