namespace WebDrop.Core; /// 谁能做什么。规则只写在这里,服务和测试都调用它。 public static class ChannelPolicy { public static bool IsOwner(Principal p) => p.Role == Role.Owner; public static bool CanRead(Principal p) => p.Role >= Role.Read; /// 成员写入需要频道允许上传,且服务端持有写令牌哈希。 public static bool CanWrite(Channel channel, Principal p) => p.Role == Role.Owner || (p.Role == Role.Write && channel.Settings.MembersCanUpload && channel.WriteHash is not null); public static bool CanDeleteItem(Channel channel, Item item, Principal p) { if (p.Role == Role.Owner) return true; if (p.Role < Role.Read) return false; return channel.Settings.DeletePolicy switch { DeletePolicy.Anyone => true, DeletePolicy.Own => item.AuthorHash.AsSpan().SequenceEqual(p.EndpointHash), _ => false, }; } }