using System.Collections.Immutable; using Phantom.Controller.Services.Users.Permissions; namespace Phantom.Controller.Services.Users.Roles; public sealed record Role(Guid Guid, string Name, ImmutableArray<Permission> Permissions) { private static readonly List<Role> AllRoles = new (); internal static IEnumerable<Role> All => AllRoles; private static Role Register(Guid guid, string name, ImmutableArray<Permission> permissions) { var role = new Role(guid, name, permissions); AllRoles.Add(role); return role; } private static Guid SystemRoleGuid(byte id) { return new Guid(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, id); } public static readonly Role Administrator = Register(SystemRoleGuid(1), "Administrator", Permission.All.ToImmutableArray()); public static readonly Role InstanceManager = Register(SystemRoleGuid(2), "Instance Manager", ImmutableArray.Create(Permission.ViewInstances, Permission.ViewInstanceLogs, Permission.CreateInstances, Permission.ControlInstances, Permission.ViewEvents)); }