Fixed group permissions
This commit is contained in:
@ -18,30 +18,34 @@ namespace TwitchChatTTS.Chat.Groups.Permissions
|
||||
|
||||
public bool? CheckIfAllowed(string path)
|
||||
{
|
||||
var res = Get(path)?.Allow;
|
||||
var res = Get(path)!.Allow;
|
||||
_logger.Debug($"Permission Node GET {path} = {res?.ToString() ?? "null"}");
|
||||
return res;
|
||||
}
|
||||
|
||||
public bool? CheckIfDirectAllowed(string path)
|
||||
{
|
||||
var res = Get(path)?.DirectAllow;
|
||||
var node = Get(path, nullIfMissing: true);
|
||||
if (node == null)
|
||||
return null;
|
||||
|
||||
var res = node.DirectAllow;
|
||||
_logger.Debug($"Permission Node GET {path} = {res?.ToString() ?? "null"} [direct]");
|
||||
return res;
|
||||
}
|
||||
|
||||
public bool? CheckIfAllowed(IEnumerable<string> groups, string path)
|
||||
{
|
||||
bool overall = false;
|
||||
bool overall = true;
|
||||
foreach (var group in groups)
|
||||
{
|
||||
var result = CheckIfAllowed($"{group}.{path}");
|
||||
if (result == false)
|
||||
return false;
|
||||
if (result == true)
|
||||
overall = true;
|
||||
return true;
|
||||
if (result == false)
|
||||
overall = false;
|
||||
}
|
||||
return overall ? true : null;
|
||||
return overall ? null : false;
|
||||
}
|
||||
|
||||
public bool? CheckIfDirectAllowed(IEnumerable<string> groups, string path)
|
||||
@ -83,16 +87,16 @@ namespace TwitchChatTTS.Chat.Groups.Permissions
|
||||
public void Set(string path, bool? allow)
|
||||
{
|
||||
var node = Get(path, true);
|
||||
node.Allow = allow;
|
||||
node!.Allow = allow;
|
||||
_logger.Debug($"Permission Node ADD {path} = {allow?.ToString() ?? "null"}");
|
||||
}
|
||||
|
||||
private PermissionNode Get(string path, bool edit = false)
|
||||
private PermissionNode? Get(string path, bool edit = false, bool nullIfMissing = false)
|
||||
{
|
||||
return Get(_root, path.ToLower(), edit);
|
||||
return Get(_root, path.ToLower(), edit, nullIfMissing);
|
||||
}
|
||||
|
||||
private PermissionNode Get(PermissionNode node, string path, bool edit)
|
||||
private PermissionNode? Get(PermissionNode node, string path, bool edit, bool nullIfMissing)
|
||||
{
|
||||
if (path.Length == 0)
|
||||
return node;
|
||||
@ -103,12 +107,12 @@ namespace TwitchChatTTS.Chat.Groups.Permissions
|
||||
if (next == null)
|
||||
{
|
||||
if (!edit)
|
||||
return node;
|
||||
return nullIfMissing ? null : node;
|
||||
|
||||
next = new PermissionNode(name, node, null);
|
||||
node.Add(next);
|
||||
}
|
||||
return Get(next, string.Join('.', parts.Skip(1)), edit);
|
||||
return Get(next, string.Join('.', parts.Skip(1)), edit, nullIfMissing);
|
||||
}
|
||||
|
||||
private sealed class PermissionNode
|
||||
|
Reference in New Issue
Block a user