feat(centralui): Templates tree context menu — "New Instance…" (Deployer-gated)
Claude-Session: https://claude.ai/code/session_01G2GHPnbbKGvyyfbr2XBRVH
This commit is contained in:
@@ -130,10 +130,16 @@
|
||||
private bool _loading = true;
|
||||
private string? _errorMessage;
|
||||
|
||||
// "New Instance…" leaves the Design area for a RequireDeployment page; only offer
|
||||
// it to users who hold that role so the menu never leads to a 403.
|
||||
private bool _canCreateInstances;
|
||||
|
||||
private ToastNotification _toast = default!;
|
||||
|
||||
protected override async Task OnInitializedAsync()
|
||||
{
|
||||
var state = await AuthStateProvider.GetAuthenticationStateAsync();
|
||||
_canCreateInstances = state.User.HasClaim(JwtTokenService.RoleClaimType, Roles.Deployer);
|
||||
await LoadTemplatesAsync();
|
||||
}
|
||||
|
||||
@@ -302,6 +308,13 @@
|
||||
{
|
||||
<button class="dropdown-item" @onclick="() => OpenComposeDialog(tmpl)">Compose into…</button>
|
||||
}
|
||||
@if (_canCreateInstances)
|
||||
{
|
||||
<div class="dropdown-divider"></div>
|
||||
<button class="dropdown-item" data-test="ctx-new-instance"
|
||||
@onclick='() => NavigationManager.NavigateTo($"/deployment/instances/create?templateId={node.Id}")'>New Instance…</button>
|
||||
<div class="dropdown-divider"></div>
|
||||
}
|
||||
<button class="dropdown-item" @onclick="() => OpenMoveTemplateDialog(node.Id, node.Name)">Move to Folder…</button>
|
||||
<div class="dropdown-divider"></div>
|
||||
@if (tmpl != null)
|
||||
|
||||
Reference in New Issue
Block a user