Fixed group permissions

This commit is contained in:
Tom 2024-08-06 20:32:02 +00:00
parent 4d27492e55
commit d019935392
3 changed files with 26 additions and 22 deletions

View File

@ -69,12 +69,12 @@ namespace TwitchChatTTS.Chat.Commands
// Check if command can be executed by this chatter. // Check if command can be executed by this chatter.
var command = selectorResult.Command; var command = selectorResult.Command;
long chatterId = long.Parse(message.ChatterUserId); long chatterId = long.Parse(message.ChatterUserId);
if (chatterId != _user.OwnerId) //if (chatterId != _user.OwnerId)
{ {
bool executable = command.AcceptCustomPermission ? CanExecute(chatterId, groups, $"tts.command.{com}", selectorResult.Permissions) : false; bool executable = command.AcceptCustomPermission ? CanExecute(chatterId, groups, $"tts.commands.{com}", selectorResult.Permissions) : false;
if (!executable) if (!executable)
{ {
_logger.Debug($"Denied permission to use command [chatter id: {chatterId}][command: {com}]"); _logger.Warning($"Denied permission to use command [chatter id: {chatterId}][args: {arg}][command type: {command.GetType().Name}]");
return ChatCommandResult.Permission; return ChatCommandResult.Permission;
} }
} }
@ -116,7 +116,7 @@ namespace TwitchChatTTS.Chat.Commands
private bool CanExecute(long chatterId, IEnumerable<string> groups, string path, string[]? additionalPaths) private bool CanExecute(long chatterId, IEnumerable<string> groups, string path, string[]? additionalPaths)
{ {
_logger.Debug($"Checking for permission [chatter id: {chatterId}][group: {string.Join(", ", groups)}][path: {path}]{(additionalPaths != null ? "[paths: " + string.Join('|', additionalPaths) + "]" : string.Empty)}"); _logger.Debug($"Checking for permission [chatter id: {chatterId}][group: {string.Join(", ", groups)}][path: {path}]{(additionalPaths != null ? "[paths: " + string.Join('|', additionalPaths) + "]" : string.Empty)}");
if (_permissionManager.CheckIfAllowed(groups, path) != false) if (_permissionManager.CheckIfAllowed(groups, path) == true)
{ {
if (additionalPaths == null) if (additionalPaths == null)
return true; return true;

View File

@ -25,7 +25,7 @@ namespace TwitchChatTTS.Chat.Commands
b.CreateVoiceNameParameter("voiceName", true) b.CreateVoiceNameParameter("voiceName", true)
.CreateCommand(new TTSVoiceSelector(_user, _logger)) .CreateCommand(new TTSVoiceSelector(_user, _logger))
.CreateMentionParameter("chatter", enabled: true, optional: true) .CreateMentionParameter("chatter", enabled: true, optional: true)
.AddPermission("tts.command.voice.admin") .AddPermission("tts.commands.voice.admin")
.CreateCommand(new TTSVoiceSelectorAdmin(_user, _logger)); .CreateCommand(new TTSVoiceSelectorAdmin(_user, _logger));
}); });
} }
@ -56,12 +56,12 @@ namespace TwitchChatTTS.Chat.Commands
if (_user.VoicesSelected.ContainsKey(chatterId)) if (_user.VoicesSelected.ContainsKey(chatterId))
{ {
await hermes.UpdateTTSUser(chatterId, voice.Key); await hermes.UpdateTTSUser(chatterId, voice.Key);
_logger.Debug($"Sent request to create chat TTS voice [voice: {voice.Value}][username: {message.ChatterUserLogin}][reason: command]"); _logger.Debug($"Sent request to update chat TTS voice [voice: {voice.Value}][username: {message.ChatterUserLogin}][reason: command]");
} }
else else
{ {
await hermes.CreateTTSUser(chatterId, voice.Key); await hermes.CreateTTSUser(chatterId, voice.Key);
_logger.Debug($"Sent request to update chat TTS voice [voice: {voice.Value}][username: {message.ChatterUserLogin}][reason: command]"); _logger.Debug($"Sent request to create chat TTS voice [voice: {voice.Value}][username: {message.ChatterUserLogin}][reason: command]");
} }
} }
} }
@ -99,12 +99,12 @@ namespace TwitchChatTTS.Chat.Commands
if (_user.VoicesSelected.ContainsKey(chatterId)) if (_user.VoicesSelected.ContainsKey(chatterId))
{ {
await hermes.UpdateTTSUser(chatterId, voice.Key); await hermes.UpdateTTSUser(chatterId, voice.Key);
_logger.Debug($"Sent request to create chat TTS voice [voice: {voice.Value}][username: {mention.UserLogin}][reason: command]"); _logger.Debug($"Sent request to update chat TTS voice [voice: {voice.Value}][username: {mention.UserLogin}][reason: command]");
} }
else else
{ {
await hermes.CreateTTSUser(chatterId, voice.Key); await hermes.CreateTTSUser(chatterId, voice.Key);
_logger.Debug($"Sent request to update chat TTS voice [voice: {voice.Value}][username: {mention.UserLogin}][reason: command]"); _logger.Debug($"Sent request to create chat TTS voice [voice: {voice.Value}][username: {mention.UserLogin}][reason: command]");
} }
} }
} }

View File

@ -18,30 +18,34 @@ namespace TwitchChatTTS.Chat.Groups.Permissions
public bool? CheckIfAllowed(string path) public bool? CheckIfAllowed(string path)
{ {
var res = Get(path)?.Allow; var res = Get(path)!.Allow;
_logger.Debug($"Permission Node GET {path} = {res?.ToString() ?? "null"}"); _logger.Debug($"Permission Node GET {path} = {res?.ToString() ?? "null"}");
return res; return res;
} }
public bool? CheckIfDirectAllowed(string path) 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]"); _logger.Debug($"Permission Node GET {path} = {res?.ToString() ?? "null"} [direct]");
return res; return res;
} }
public bool? CheckIfAllowed(IEnumerable<string> groups, string path) public bool? CheckIfAllowed(IEnumerable<string> groups, string path)
{ {
bool overall = false; bool overall = true;
foreach (var group in groups) foreach (var group in groups)
{ {
var result = CheckIfAllowed($"{group}.{path}"); var result = CheckIfAllowed($"{group}.{path}");
if (result == false)
return false;
if (result == true) 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) public bool? CheckIfDirectAllowed(IEnumerable<string> groups, string path)
@ -83,16 +87,16 @@ namespace TwitchChatTTS.Chat.Groups.Permissions
public void Set(string path, bool? allow) public void Set(string path, bool? allow)
{ {
var node = Get(path, true); var node = Get(path, true);
node.Allow = allow; node!.Allow = allow;
_logger.Debug($"Permission Node ADD {path} = {allow?.ToString() ?? "null"}"); _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) if (path.Length == 0)
return node; return node;
@ -103,12 +107,12 @@ namespace TwitchChatTTS.Chat.Groups.Permissions
if (next == null) if (next == null)
{ {
if (!edit) if (!edit)
return node; return nullIfMissing ? null : node;
next = new PermissionNode(name, node, null); next = new PermissionNode(name, node, null);
node.Add(next); 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 private sealed class PermissionNode