1
0
mirror of https://github.com/chylex/Minecraft-Phantom-Panel.git synced 2025-05-07 09:34:03 +02:00

Add permissions for existing web pages

This commit is contained in:
chylex 2022-10-22 20:03:19 +02:00
parent 0e6d506cb4
commit 1c2c32c2e6
Signed by: chylex
GPG Key ID: 4DE42C8F19A80548
6 changed files with 31 additions and 6 deletions
Server

View File

@ -9,4 +9,13 @@ public sealed record Permission(string Id, Permission? Parent) {
AllPermissions.Add(permission);
return permission;
}
public const string ViewInstancesPolicy = "Instances.View";
public static readonly Permission ViewInstances = Register(ViewInstancesPolicy);
public const string CreateInstancesPolicy = "Instances.Create";
public static readonly Permission CreateInstances = Register(CreateInstancesPolicy, parent: ViewInstances);
public const string ViewAuditPolicy = "Audit.View";
public static readonly Permission ViewAudit = Register(ViewAuditPolicy);
}

View File

@ -1,5 +1,6 @@
@using Phantom.Server.Services
@inject ServiceConfiguration Configuration
@inject PermissionManager PermissionManager
<div class="navbar navbar-dark">
<div class="container-fluid">
@ -18,10 +19,19 @@
<NavMenuItem Label="Login" Icon="account-login" Href="login" />
</NotAuthorized>
<Authorized>
<NavMenuItem Label="Instances" Icon="folder" Href="instances" />
<NavMenuItem Label="Agents" Icon="cloud" Href="agents" />
<NavMenuItem Label="Audit Log" Icon="clipboard" Href="audit" />
<NavMenuItem Label="Logout" Icon="account-logout" Href="logout" />
@{ var permissions = PermissionManager.GetPermissions(context.User); }
@if (permissions.Check(Permission.ViewInstances)) {
<NavMenuItem Label="Instances" Icon="folder" Href="instances" />
}
<NavMenuItem Label="Agents" Icon="cloud" Href="agents" />
@if (permissions.Check(Permission.ViewAudit)) {
<NavMenuItem Label="Audit Log" Icon="clipboard" Href="audit" />
}
<NavMenuItem Label="Logout" Icon="account-logout" Href="logout" />
</Authorized>
</AuthorizeView>
</nav>

View File

@ -1,4 +1,5 @@
@page "/audit"
@attribute [Authorize(Permission.ViewAuditPolicy)]
@using Phantom.Server.Database.Enums
@using Phantom.Server.Services.Audit
@using Phantom.Server.Services.Instances

View File

@ -11,6 +11,7 @@
@using Phantom.Common.Data.Java
@using Phantom.Common.Data
@using Phantom.Common.Data.Instance
@attribute [Authorize(Permission.CreateInstancesPolicy)]
@inject INavigation Nav
@inject MinecraftVersions MinecraftVersions
@inject AgentJavaRuntimesManager AgentJavaRuntimesManager

View File

@ -1,4 +1,5 @@
@page "/instances/{InstanceGuid:guid}"
@attribute [Authorize(Permission.ViewInstancesPolicy)]
@using Phantom.Common.Data.Instance
@using Phantom.Common.Data.Replies
@using Phantom.Server.Services.Audit

View File

@ -1,4 +1,5 @@
@page "/instances"
@attribute [Authorize(Permission.ViewInstancesPolicy)]
@using System.Collections.Immutable
@using Phantom.Server.Services.Agents
@using Phantom.Server.Services.Instances
@ -8,7 +9,9 @@
<h1>Instances</h1>
<a href="instances/create" class="btn btn-primary" role="button">New Instance</a>
<PermissionView Permission="Permission.CreateInstances">
<a href="instances/create" class="btn btn-primary" role="button">New Instance</a>
</PermissionView>
<table class="table align-middle">
<thead>
@ -76,7 +79,7 @@
this.agentNames = agents.ToImmutableDictionary(static agent => agent.Guid, static agent => agent.Name);
InvokeAsync(StateHasChanged);
});
InstanceManager.InstancesChanged.Subscribe(this, instances => {
this.instances = instances.Values.OrderBy(instance => agentNames.TryGetValue(instance.Configuration.AgentGuid, out var agentName) ? agentName : string.Empty).ThenBy(static instance => instance.Configuration.InstanceName).ToImmutableArray();
InvokeAsync(StateHasChanged);