Files
ShrinkNetwork/Runtime/Metadata/ShrinkNetworkPermissions.cs
cneicy 8eaaa3040a
Publish UPM package / publish (push) Failing after 1s
chore: initialize standalone UPM package
2026-08-26 02:50:34 +08:00

65 lines
1.9 KiB
C#

#nullable enable
using System;
using System.Collections.Generic;
namespace ShrinkNetwork
{
public enum ShrinkNetworkPeerKind
{
Unknown = 0,
Client = 1,
Server = 2,
TrustedServer = 3
}
public enum ShrinkNetworkAuthority
{
Any = 0,
ClientOnly = 1,
ServerOnly = 2,
TrustedServerOnly = 3
}
public readonly struct ShrinkNetworkPermissionRequirement
{
public ShrinkNetworkAuthority Authority { get; }
public string? Permission { get; }
public ShrinkNetworkPermissionRequirement(ShrinkNetworkAuthority authority, string? permission)
{
Authority = authority;
Permission = string.IsNullOrWhiteSpace(permission) ? null : permission.Trim();
}
}
internal static class ShrinkNetworkPermissionValidator
{
public static bool IsAllowed(ShrinkNetworkSession session, ShrinkNetworkPermissionRequirement requirement)
{
if (session == null)
return false;
if (!CheckAuthority(session.PeerKind, requirement.Authority))
return false;
if (!string.IsNullOrEmpty(requirement.Permission) && !session.HasPermission(requirement.Permission))
return false;
return true;
}
private static bool CheckAuthority(ShrinkNetworkPeerKind peerKind, ShrinkNetworkAuthority authority)
{
return authority switch
{
ShrinkNetworkAuthority.Any => true,
ShrinkNetworkAuthority.ClientOnly => peerKind == ShrinkNetworkPeerKind.Client,
ShrinkNetworkAuthority.ServerOnly => peerKind == ShrinkNetworkPeerKind.Server || peerKind == ShrinkNetworkPeerKind.TrustedServer,
ShrinkNetworkAuthority.TrustedServerOnly => peerKind == ShrinkNetworkPeerKind.TrustedServer,
_ => false
};
}
}
}