fix(management): reconcile area role gate to Designer|Deployer across actor and all three docs (arch-review C6)
Claude-Session: https://claude.ai/code/session_01MtdgwpEeCUn6cUA5f1LMPj
This commit is contained in:
@@ -3125,4 +3125,31 @@ public class ManagementActorTests : TestKit, IDisposable
|
||||
Arg.Is<Commons.Entities.ExternalSystems.ExternalSystemDefinition>(d => d.TimeoutSeconds == 42),
|
||||
Arg.Any<CancellationToken>());
|
||||
}
|
||||
|
||||
// ========================================================================
|
||||
// Area management role gate (arch-review C6): reconciled to any-of
|
||||
// [Designer, Deployer]. The Central UI creates areas inside the Deployment
|
||||
// Topology workflow (RequireDeployment), so a pure-Deployer must be allowed.
|
||||
// ========================================================================
|
||||
|
||||
[Theory]
|
||||
[InlineData("Designer")]
|
||||
[InlineData("Deployer")]
|
||||
public void CreateArea_DesignerOrDeployer_Allowed(string role)
|
||||
{
|
||||
var actor = CreateActor();
|
||||
actor.Tell(Envelope(new CreateAreaCommand(1, "Area1", null), role));
|
||||
// The gate must let both roles through. Dispatch may still fail (no
|
||||
// AreaService wired), but it must NOT be an authorization rejection.
|
||||
var resp = ExpectMsg<object>(TimeSpan.FromSeconds(5));
|
||||
Assert.IsNotType<ManagementUnauthorized>(resp);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void CreateArea_ViewerOnly_Unauthorized()
|
||||
{
|
||||
var actor = CreateActor();
|
||||
actor.Tell(Envelope(new CreateAreaCommand(1, "Area1", null), "Viewer"));
|
||||
ExpectMsg<ManagementUnauthorized>(TimeSpan.FromSeconds(5));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user