This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
#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
|
||||
};
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user