V13-FE-011: finalize search list layout slice
This commit is contained in:
+65
@@ -0,0 +1,65 @@
|
||||
// <auto-generated />
|
||||
namespace KBX.Shared.Authorization.Generated;
|
||||
|
||||
public static class KbxPermissions
|
||||
{
|
||||
public const string CommonAiUse = "common.ai.use";
|
||||
public const string CommonAiExecute = "common.ai.execute";
|
||||
public const string CommonOperationsClaim = "common.operations.claim";
|
||||
public const string CommonOperationsCreate = "common.operations.create";
|
||||
public const string CommonOperationsRead = "common.operations.read";
|
||||
public const string CommonOperationsResolve = "common.operations.resolve";
|
||||
public const string CommonOperationsRetry = "common.operations.retry";
|
||||
public const string CommonReconcileRead = "common.reconcile.read";
|
||||
public const string CommonRuntimeRead = "common.runtime.read";
|
||||
public const string CommonSuggestionCreate = "common.suggestion.create";
|
||||
public const string ErpInventoryMoveConfirm = "erp.inventory.move.confirm";
|
||||
public const string ErpInventoryMoveRead = "erp.inventory.move.read";
|
||||
public const string ErpInventoryMoveReceive = "erp.inventory.move.receive";
|
||||
public const string ErpInventoryMoveShip = "erp.inventory.move.ship";
|
||||
public const string ErpInventoryMoveWrite = "erp.inventory.move.write";
|
||||
public const string ErpInventoryRead = "erp.inventory.read";
|
||||
public const string ErpItemPriceRead = "erp.item.price.read";
|
||||
public const string ErpItemPriceWrite = "erp.item.price.write";
|
||||
public const string ErpItemCreate = "erp.item.create";
|
||||
public const string ErpItemRead = "erp.item.read";
|
||||
public const string ErpItemWrite = "erp.item.write";
|
||||
public const string ErpPurchaseCancel = "erp.purchase.cancel";
|
||||
public const string ErpPurchaseConfirm = "erp.purchase.confirm";
|
||||
public const string ErpPurchaseRead = "erp.purchase.read";
|
||||
public const string ErpPurchaseWrite = "erp.purchase.write";
|
||||
public const string ImportsExecute = "imports.execute";
|
||||
public const string KbxDesignRead = "kbx.design.read";
|
||||
public const string OmsClaimApprove = "oms.claim.approve";
|
||||
public const string OmsClaimHold = "oms.claim.hold";
|
||||
public const string OmsClaimProcess = "oms.claim.process";
|
||||
public const string OmsClaimRead = "oms.claim.read";
|
||||
public const string OmsOrderCreate = "oms.order.create";
|
||||
public const string OmsOrderImport = "oms.order.import";
|
||||
public const string OmsOrderRead = "oms.order.read";
|
||||
public const string OmsOrderShip = "oms.order.ship";
|
||||
public const string OmsOrderRecipientUnmask = "oms.order.recipient.unmask";
|
||||
public const string OmsOrderRecipientExport = "oms.order.recipient.export";
|
||||
public const string WmsInventoryCount = "wms.inventory.count";
|
||||
public const string WmsPickingExecute = "wms.picking.execute";
|
||||
public const string WmsPutawayExecute = "wms.putaway.execute";
|
||||
public const string WmsReceivingExecute = "wms.receiving.execute";
|
||||
public const string WmsWorkExecute = "wms.work.execute";
|
||||
public const string WmsWorkRead = "wms.work.read";
|
||||
public const string CommonTelemetryWrite = "common.telemetry.write";
|
||||
public const string CommonUxRead = "common.ux.read";
|
||||
public const string CommonExperimentEvaluate = "common.experiment.evaluate";
|
||||
public const string CommonExperimentRead = "common.experiment.read";
|
||||
public const string CommonExperimentManage = "common.experiment.manage";
|
||||
public const string CommonIntegrationRead = "common.integration.read";
|
||||
public const string CommonIntegrationRetry = "common.integration.retry";
|
||||
public const string CommonExternalDataRead = "common.external-data.read";
|
||||
public const string CommonExternalDataRefresh = "common.external-data.refresh";
|
||||
public const string OmsOrderConfirm = "oms.order.confirm";
|
||||
public const string OmsOrderWrite = "oms.order.write";
|
||||
}
|
||||
|
||||
public static class KbxSensitivePolicies
|
||||
{
|
||||
public const string OmsOrderRecipient = "oms.order.recipient";
|
||||
}
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
namespace KBX.Shared.Authorization;
|
||||
|
||||
public interface IKbxPermissionEvaluator
|
||||
{
|
||||
bool Has(string permission);
|
||||
bool HasAll(params string[] permissions);
|
||||
}
|
||||
|
||||
public sealed record KbxSensitiveDisclosure(
|
||||
Guid TenantId,
|
||||
Guid UserId,
|
||||
string PolicyId,
|
||||
string EntityType,
|
||||
string EntityId,
|
||||
IReadOnlyList<string> Fields,
|
||||
string? Reason,
|
||||
string CorrelationId);
|
||||
@@ -0,0 +1,14 @@
|
||||
using KBX.Shared.Authorization.Generated;
|
||||
namespace KBX.Shared.Authorization;
|
||||
|
||||
public static class KbxSensitiveDataPolicy
|
||||
{
|
||||
public static bool CanRevealOrderRecipient(IKbxPermissionEvaluator permissions)
|
||||
=> permissions.Has(KbxPermissions.OmsOrderRecipientUnmask);
|
||||
|
||||
public static bool CanExportOrderRecipientUnmasked(IKbxPermissionEvaluator permissions)
|
||||
=> permissions.Has(KbxPermissions.OmsOrderRecipientExport);
|
||||
|
||||
public static IReadOnlyList<string> OrderRecipientFields { get; } =
|
||||
["receiverName", "phone", "postalCode", "address1", "address2"];
|
||||
}
|
||||
+20
@@ -0,0 +1,20 @@
|
||||
using Dapper;
|
||||
using Npgsql;
|
||||
namespace KBX.Shared.Authorization;
|
||||
|
||||
public sealed class SensitiveDataDisclosureAuditWriter(NpgsqlDataSource dataSource)
|
||||
{
|
||||
public async Task WriteAsync(KbxSensitiveDisclosure disclosure, CancellationToken ct)
|
||||
{
|
||||
const string sql = """
|
||||
insert into kbx.sensitive_data_disclosures
|
||||
(tenant_id,user_id,policy_id,entity_type,entity_id,fields,reason,correlation_id,occurred_at)
|
||||
values (@TenantId,@UserId,@PolicyId,@EntityType,@EntityId,@Fields::jsonb,@Reason,@CorrelationId,now())
|
||||
""";
|
||||
await using var connection = await dataSource.OpenConnectionAsync(ct);
|
||||
await connection.ExecuteAsync(new CommandDefinition(sql, new {
|
||||
disclosure.TenantId, disclosure.UserId, disclosure.PolicyId, disclosure.EntityType,
|
||||
disclosure.EntityId, Fields = System.Text.Json.JsonSerializer.Serialize(disclosure.Fields),
|
||||
disclosure.Reason, disclosure.CorrelationId }, cancellationToken: ct));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user