namespace Phantom.Controller.Services.Users.Permissions; public sealed record Permission(string Id, Permission? Parent) { private static readonly List<Permission> AllPermissions = new (); public static IEnumerable<Permission> All => AllPermissions; private static Permission Register(string id, Permission? parent = null) { var permission = new Permission(id, parent); AllPermissions.Add(permission); return permission; } private Permission RegisterChild(string id) { return Register(id, this); } public const string ViewInstancesPolicy = "Instances.View"; public static readonly Permission ViewInstances = Register(ViewInstancesPolicy); public const string ViewInstanceLogsPolicy = "Instances.Logs.View"; public static readonly Permission ViewInstanceLogs = ViewInstances.RegisterChild(ViewInstanceLogsPolicy); public const string CreateInstancesPolicy = "Instances.Create"; public static readonly Permission CreateInstances = ViewInstances.RegisterChild(CreateInstancesPolicy); public const string ControlInstancesPolicy = "Instances.Control"; public static readonly Permission ControlInstances = ViewInstances.RegisterChild(ControlInstancesPolicy); public const string ViewUsersPolicy = "Users.View"; public static readonly Permission ViewUsers = Register(ViewUsersPolicy); public const string EditUsersPolicy = "Users.Edit"; public static readonly Permission EditUsers = ViewUsers.RegisterChild(EditUsersPolicy); public const string ViewAuditPolicy = "Audit.View"; public static readonly Permission ViewAudit = Register(ViewAuditPolicy); public const string ViewEventsPolicy = "Events.View"; public static readonly Permission ViewEvents = Register(ViewEventsPolicy); }