Adding permissions. I hate my life ;)

This commit is contained in:
Marcel Baumgartner 2023-07-16 22:44:36 +02:00
parent 178ff36e86
commit 74d4ee729d
18 changed files with 698 additions and 706 deletions

View file

@ -9,6 +9,104 @@ public static class Permissions
Description = "See basic information about growth and status of the moonlight instance"
};
public static Permission SystemDashboard = new()
{
Index = 1,
Name = "System information",
Description = "See information about the moonlight instance like the uptime and memory usage"
};
public static Permission SystemSentry = new()
{
Index = 2,
Name = "Settings for Sentry",
Description = "See information about the sentry status"
};
public static Permission SystemMalware = new()
{
Index = 3,
Name = "Server malware scanner",
Description = "Scan running servers for malware"
};
public static Permission SystemSecurity = new()
{
Index = 4,
Name = "System security settings",
Description = "Ban ip addresses and view the security logs"
};
public static Permission SystemResources = new()
{
Index = 5,
Name = "Resources",
Description = "Read and write moonlight resources like configuration files"
};
public static Permission DiscordBot = new()
{
Index = 6,
Name = "Discord bot actions",
Description = "Setup and remote control the discord bot if enabled"
};
public static Permission NewsMessages = new()
{
Index = 7,
Name = "News messages",
Description = "Edit, view and delete messages for the user dashboard"
};
public static Permission SystemConfiguration = new()
{
Index = 8,
Name = "System configuration",
Description = "Modify the moonlight configuration though the visual editor"
};
public static Permission SystemMail = new()
{
Index = 9,
Name = "System mail settings",
Description = "Modify the mail templates and send test mails"
};
public static Permission ServersOverview = new()
{
Index = 10,
Name = "Servers overview",
Description = "View all servers and their owners"
};
public static Permission ServerAdminEdit = new()
{
Index = 11,
Name = "Edit servers",
Description = "View all servers and their owners"
};
public static Permission ServerManager = new()
{
Index = 12,
Name = "Server manager",
Description = "View all servers are currently running and stop/kill all running servers"
};
public static Permission ServerCleanup = new()
{
Index = 13,
Name = "Server cleanup",
Description = "View the stats about the cleanup system"
};
public static Permission Nodes = new()
{
Index = 14,
Name = "Nodes",
Description = "View stats about the nodes"
};
public static Permission? FromString(string name)
{
var type = typeof(Permissions);

View file

@ -77,6 +77,7 @@
<_ContentIncludedByDefault Remove="Shared\Views\Admin\Servers\Cleanup\Exceptions\Edit.razor" />
<_ContentIncludedByDefault Remove="Shared\Components\News\NewsEditor.razor" />
<_ContentIncludedByDefault Remove="Shared\News\Edit.razor" />
<_ContentIncludedByDefault Remove="Shared\Views\Admin\AaPanels\Index.razor" />
</ItemGroup>
<ItemGroup>

View file

@ -1,2 +0,0 @@
@page "/admin/aapanels"

View file

@ -17,8 +17,7 @@
@attribute [PermissionRequired(nameof(Permissions.AdminDashboard))]
<OnlyAdmin>
<LazyLoader Load="Load">
<LazyLoader Load="Load">
<div class="row mb-5">
<div class="col-12 col-lg-6 col-xl">
<a class="mt-4 card" href="/admin/servers">
@ -127,8 +126,7 @@
<HealthCheckView HealthCheck="@HealthCheckData"/>
}
</LazyLoader>
</LazyLoader>
</OnlyAdmin>
</LazyLoader>
@code
{

View file

@ -8,13 +8,16 @@
@inject ServerRepository ServerRepository
@inject SmartTranslateService SmartTranslateService
<OnlyAdmin>
<div class="row">
@attribute [PermissionRequired(nameof(Permissions.ServersOverview))]
<div class="row">
<LazyLoader Load="Load">
<div class="card">
<div class="card-header border-0 pt-5">
<h3 class="card-title align-items-start flex-column">
<span class="card-label fw-bold fs-3 mb-1"><TL>Servers</TL></span>
<span class="card-label fw-bold fs-3 mb-1">
<TL>Servers</TL>
</span>
</h3>
<div class="card-toolbar">
<a href="/admin/servers/new" class="btn btn-sm btn-light-success">
@ -62,8 +65,7 @@
</div>
</div>
</LazyLoader>
</div>
</OnlyAdmin>
</div>
@code
{

View file

@ -1,106 +0,0 @@
@page "/admin/system/auditlog"
@using Moonlight.Shared.Components.Navigations
@using Moonlight.App.Repositories.LogEntries
@using Moonlight.App.Services
@using Moonlight.App.Database.Entities.LogsEntries
@using BlazorTable
@using Moonlight.App.Helpers
@using Moonlight.App.Models.Misc
@using Moonlight.Shared.Components.AuditLogEntrys
@inject AuditLogEntryRepository AuditLogEntryRepository
<OnlyAdmin>
<AdminSystemNavigation Index="2"/>
<div class="card">
<div class="card-header card-header-stretch">
<div class="card-title d-flex align-items-center">
<span class="me-3 lh-0">
<i class="bx bx-md bx-calendar"></i>
</span>
<h3 class="fw-bold m-0 text-gray-800">@(Formatter.FormatDateOnly(DateTime))</h3>
</div>
<div class="card-toolbar m-0">
<ul class="nav nav-tabs nav-line-tabs nav-stretch fs-6 border-0 fw-bold">
<li class="nav-item">
<button @onclick="Left" class="nav-link justify-content-center text-active-gray-800">
<i class="bx bx-md bx-left-arrow"></i>
</button>
</li>
<li class="nav-item">
<button @onclick="Right" class="nav-link justify-content-center text-active-gray-800">
<i class="bx bx-md bx-right-arrow"></i>
</button>
</li>
</ul>
</div>
</div>
<div class="card-body">
<LazyLoader @ref="LazyLoader" Load="Load">
@if (AuditLogEntries.Any())
{
<div class="timeline">
@foreach (var entry in AuditLogEntries)
{
switch (entry.Type)
{
case AuditLogType.Login:
<AuditLogEntryLogin Entry="entry"/>
break;
case AuditLogType.Register:
<AuditLogEntryRegister Entry="entry"/>
break;
case AuditLogType.ChangePassword:
<AuditLogEntryChangePassword Entry="entry"/>
break;
case AuditLogType.ChangePowerState:
<AuditLogEntryChangePowerState Entry="entry"/>
break;
}
}
</div>
}
else
{
<div class="alert alert-primary">
<TL>No records found for this day</TL>
</div>
}
</LazyLoader>
</div>
</div>
</OnlyAdmin>
@code
{
private AuditLogEntry[] AuditLogEntries;
private LazyLoader LazyLoader;
private DateTime DateTime = DateTime.Today;
private Task Load(LazyLoader arg)
{
AuditLogEntries = AuditLogEntryRepository
.Get()
.Where(x => x.CreatedAt.Date == DateTime.Date)
.OrderByDescending(x => x.Id)
.ToArray();
return Task.CompletedTask;
}
private async Task Left()
{
DateTime = DateTime.AddDays(1);
await LazyLoader.Reload();
}
private async Task Right()
{
DateTime = DateTime.AddDays(-1);
await LazyLoader.Reload();
}
}

View file

@ -9,10 +9,11 @@
@inject ToastService ToastService
@inject SmartTranslateService SmartTranslateService
<OnlyAdmin>
<AdminSystemNavigation Index="8"/>
@attribute [PermissionRequired(nameof(Permissions.SystemConfiguration))]
<LazyLoader Load="Load">
<AdminSystemNavigation Index="8"/>
<LazyLoader Load="Load">
<div class="card">
<SmartForm Model="Config" OnValidSubmit="OnSubmit">
<div class="card-body">
@ -27,8 +28,7 @@
</div>
</SmartForm>
</div>
</LazyLoader>
</OnlyAdmin>
</LazyLoader>
@code
{

View file

@ -4,10 +4,11 @@
@inject DiscordBotService DiscordBotService
<OnlyAdmin>
<AdminSystemNavigation Index="6"/>
@attribute [PermissionRequired(nameof(Permissions.DiscordBot))]
<div class="mt-3 card card-body">
<AdminSystemNavigation Index="6"/>
<div class="mt-3 card card-body">
<WButton Text="Register commands"
WorkingText="Working"
CssClasses="btn-primary"
@ -19,8 +20,7 @@
CssClasses="mt-3 btn-danger"
OnClick="VoidCommands">
</WButton>
</div>
</OnlyAdmin>
</div>
@code
{

View file

@ -7,10 +7,11 @@
@inject HostSystemHelper HostSystemHelper
@inject MoonlightService MoonlightService
<OnlyAdmin>
<AdminSystemNavigation Index="0"/>
@attribute [PermissionRequired(nameof(Permissions.SystemDashboard))]
<LazyLoader Load="Load">
<AdminSystemNavigation Index="0"/>
<LazyLoader Load="Load">
<div class="row">
<div class="col-xxl-6 my-3">
<div class="card">
@ -91,8 +92,7 @@
</div>
</div>
</div>
</LazyLoader>
</OnlyAdmin>
</LazyLoader>
@code
{

View file

@ -16,10 +16,11 @@
@inject AlertService AlertService
@inject MailService MailService
<OnlyAdmin>
<AdminSystemNavigation Index="9"/>
@attribute [PermissionRequired(nameof(Permissions.SystemMail))]
<div class="card mb-3">
<AdminSystemNavigation Index="9"/>
<div class="card mb-3">
<div class="card-header">
<span class="card-title">
<TL>Actions</TL>
@ -32,9 +33,9 @@
OnClick="SendTestMail">
</WButton>
</div>
</div>
</div>
<LazyLoader @ref="LazyLoader" Load="Load">
<LazyLoader @ref="LazyLoader" Load="Load">
@if (CurrentMailTemplate == null)
{
<div class="card">
@ -87,8 +88,7 @@
OnCancel="OnCancelTemplateEdit"
OnSubmit="OnSubmitTemplateEdit"/>
}
</LazyLoader>
</OnlyAdmin>
</LazyLoader>
@code
{

View file

@ -14,10 +14,11 @@
@implements IDisposable
<OnlyAdmin>
<AdminSystemNavigation Index="2"/>
@attribute [PermissionRequired(nameof(Permissions.SystemMalware))]
<div class="row">
<AdminSystemNavigation Index="2"/>
<div class="row">
<div class="col-12 col-lg-6">
<div class="card">
<div class="card-body">
@ -95,8 +96,7 @@
</div>
</div>
</div>
</div>
</OnlyAdmin>
</div>
@code
{

View file

@ -10,8 +10,9 @@
@inject NavigationManager NavigationManager
@inject NewsEntryRepository NewsEntryRepository
<OnlyAdmin>
<LazyLoader Load="Load">
@attribute [PermissionRequired(nameof(Permissions.NewsMessages))]
<LazyLoader Load="Load">
@if (Entry == null)
{
<div class="alert bg-info d-flex flex-column flex-sm-row w-100 p-5">
@ -48,8 +49,7 @@
</div>
</div>
}
</LazyLoader>
</OnlyAdmin>
</LazyLoader>
@code
{

View file

@ -12,18 +12,19 @@
@inject SmartTranslateService SmartTranslateService
@inject AlertService AlertService
<OnlyAdmin>
<AdminSystemNavigation Index="7" />
@attribute [PermissionRequired(nameof(Permissions.NewsMessages))]
<div class="card card-body mb-6">
<AdminSystemNavigation Index="7"/>
<div class="card card-body mb-6">
<div class="text-end">
<a href="/admin/system/news/new" class="btn btn-success">
<TL>New entry</TL>
</a>
</div>
</div>
</div>
<LazyLoader @ref="LazyLoader" Load="Load">
<LazyLoader @ref="LazyLoader" Load="Load">
@foreach (var entry in Entries)
{
<div class="card mb-6">
@ -54,8 +55,7 @@
</div>
</div>
}
</LazyLoader>
</OnlyAdmin>
</LazyLoader>
@code
{

View file

@ -9,8 +9,9 @@
@inject NavigationManager NavigationManager
@inject NewsEntryRepository NewsEntryRepository
<OnlyAdmin>
<div class="card mb-6">
@attribute [PermissionRequired(nameof(Permissions.NewsMessages))]
<div class="card mb-6">
<div class="card-header">
<h3 class="card-title w-75">
<input type="text" @bind="Model.Title" placeholder="@SmartTranslateService.Translate("Title...")" class="form-control form-control-flush"/>
@ -29,8 +30,7 @@
WorkingText="@SmartTranslateService.Translate("Saving...")">
</WButton>
</div>
</div>
</OnlyAdmin>
</div>
@code
{

View file

@ -11,10 +11,11 @@
@inject ConfigService ConfigService
@inject AlertService AlertService
<OnlyAdmin>
<AdminSystemNavigation Index="5"/>
@attribute [PermissionRequired(nameof(Permissions.SystemResources))]
<div class="card card-body mb-6">
<AdminSystemNavigation Index="5"/>
<div class="card card-body mb-6">
<div class="text-end">
<WButton CssClasses="btn btn-primary"
Text="@(SmartTranslateService.Translate("Reload config"))"
@ -22,13 +23,12 @@
OnClick="ReloadConfig">
</WButton>
</div>
</div>
</div>
<div class="card card-body">
<div class="card card-body">
<FileManager Access="@(new HostFileAccess(PathBuilder.Dir("storage")))">
</FileManager>
</div>
</OnlyAdmin>
</div>
@code
{

View file

@ -13,10 +13,11 @@
@inject EventSystem Event
@inject ToastService ToastService
<OnlyAdmin>
<AdminSystemNavigation Index="3"/>
@attribute [PermissionRequired(nameof(Permissions.SystemSecurity))]
<div class="card mb-5">
<AdminSystemNavigation Index="3"/>
<div class="card mb-5">
<div class="card-header">
<div class="card-title">
<TL>Ip Bans</TL>
@ -53,8 +54,7 @@
</Table>
</LazyLoader>
</div>
</div>
</OnlyAdmin>
</div>
@code
{

View file

@ -3,10 +3,11 @@
@using Moonlight.Shared.Components.Navigations
@using global::Sentry
<OnlyAdmin>
<AdminSystemNavigation Index="1"/>
@attribute [PermissionRequired(nameof(Permissions.SystemSentry))]
<div class="row">
<AdminSystemNavigation Index="1"/>
<div class="row">
<div class="col-xxl-6 my-3">
<div class="card">
<div class="card-header">
@ -28,8 +29,7 @@
</div>
</div>
</div>
</div>
</OnlyAdmin>
</div>
@code
{

View file

@ -7,6 +7,7 @@
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using Moonlight
@using Moonlight.App.Perms
@using Moonlight.Shared.Components
@using Moonlight.Shared.Components.StateLogic
@using Moonlight.Shared.Components.Alerts