27 lines
1006 B
C#
27 lines
1006 B
C#
namespace WebDrop.Core;
|
|
|
|
/// <summary>谁能做什么。规则只写在这里,服务和测试都调用它。</summary>
|
|
public static class ChannelPolicy
|
|
{
|
|
public static bool IsOwner(Principal p) => p.Role == Role.Owner;
|
|
|
|
public static bool CanRead(Principal p) => p.Role >= Role.Read;
|
|
|
|
/// <summary>成员写入需要频道允许上传,且服务端持有写令牌哈希。</summary>
|
|
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,
|
|
};
|
|
}
|
|
}
|