Access refactor
Access is now done through a list of access lists, instead of the necessary/sufficient system that was extremely confusing. Added a "deny" list so you can screw over sec. Cleaned the API up so it all uses sets and such. PDA now relays access read-only to fix edge cases.
This commit is contained in:
@@ -4,29 +4,42 @@ using Robust.Shared.GameObjects;
|
||||
using Robust.Shared.Serialization;
|
||||
using Robust.Shared.ViewVariables;
|
||||
|
||||
#nullable enable
|
||||
|
||||
namespace Content.Server.GameObjects.Components.Access
|
||||
{
|
||||
/// <summary>
|
||||
/// Simple mutable access provider found on ID cards and such.
|
||||
/// </summary>
|
||||
[RegisterComponent]
|
||||
[ComponentReference(typeof(IAccess))]
|
||||
public class AccessComponent : Component, IAccess
|
||||
{
|
||||
public override string Name => "Access";
|
||||
|
||||
[ViewVariables]
|
||||
private List<string> _tags;
|
||||
private readonly HashSet<string> _tags = new HashSet<string>();
|
||||
|
||||
public ISet<string> Tags => _tags;
|
||||
public bool IsReadOnly => false;
|
||||
|
||||
public override void ExposeData(ObjectSerializer serializer)
|
||||
{
|
||||
base.ExposeData(serializer);
|
||||
serializer.DataField(ref _tags, "tags", new List<string>());
|
||||
|
||||
serializer.DataReadWriteFunction("tags", new List<string>(),
|
||||
value =>
|
||||
{
|
||||
_tags.Clear();
|
||||
_tags.UnionWith(value);
|
||||
},
|
||||
() => new List<string>(_tags));
|
||||
}
|
||||
|
||||
public List<string> GetTags()
|
||||
public void SetTags(IEnumerable<string> newTags)
|
||||
{
|
||||
return _tags;
|
||||
}
|
||||
|
||||
public void SetTags(List<string> newTags)
|
||||
{
|
||||
_tags = newTags;
|
||||
_tags.Clear();
|
||||
_tags.UnionWith(newTags);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user