Handle local permissions as a ulong and decouple from the ones stored in the database.
This commit is contained in:
parent
b9a7a43db8
commit
9381bdfe51
5 changed files with 138 additions and 22 deletions
SharpChat
C2SPacketHandlers
EventStorage
SharpChatCommon
|
@ -32,7 +32,8 @@ public class SendMessageC2SPacketHandler(
|
||||||
User? user = ctx.Connection.User;
|
User? user = ctx.Connection.User;
|
||||||
string? messageText = args.ElementAtOrDefault(2);
|
string? messageText = args.ElementAtOrDefault(2);
|
||||||
|
|
||||||
if(user == null || !user.Can(UserPermissions.SendMessage) || string.IsNullOrWhiteSpace(messageText))
|
if(user?.Permissions.HasFlag(UserPermissions.SendMessage) != true
|
||||||
|
|| string.IsNullOrWhiteSpace(messageText))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Extra validation step, not necessary at all but enforces proper formatting in SCv1.
|
// Extra validation step, not necessary at all but enforces proper formatting in SCv1.
|
||||||
|
|
|
@ -35,7 +35,7 @@ public partial class MariaDBEventStorage(string connString) : EventStorage {
|
||||||
new MySqlParameter("sender_colour", senderColour.ToMisuzu()),
|
new MySqlParameter("sender_colour", senderColour.ToMisuzu()),
|
||||||
new MySqlParameter("sender_rank", senderRank),
|
new MySqlParameter("sender_rank", senderRank),
|
||||||
new MySqlParameter("sender_nick", string.IsNullOrWhiteSpace(senderNick) ? null : senderNick),
|
new MySqlParameter("sender_nick", string.IsNullOrWhiteSpace(senderNick) ? null : senderNick),
|
||||||
new MySqlParameter("sender_perms", senderPerms)
|
new MySqlParameter("sender_perms", ToStoredPermissions(senderPerms))
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -75,7 +75,7 @@ public partial class MariaDBEventStorage(string connString) : EventStorage {
|
||||||
reader.IsDBNull(reader.GetOrdinal("event_sender_name")) ? string.Empty : reader.GetString("event_sender_name"),
|
reader.IsDBNull(reader.GetOrdinal("event_sender_name")) ? string.Empty : reader.GetString("event_sender_name"),
|
||||||
ColourInheritable.FromMisuzu(reader.GetInt32("event_sender_colour")),
|
ColourInheritable.FromMisuzu(reader.GetInt32("event_sender_colour")),
|
||||||
reader.GetInt32("event_sender_rank"),
|
reader.GetInt32("event_sender_rank"),
|
||||||
(UserPermissions)reader.GetInt32("event_sender_perms"),
|
FromStoredPermissions((StoredUserPermissions)reader.GetInt32("event_sender_perms")),
|
||||||
reader.IsDBNull(reader.GetOrdinal("event_sender_nick")) ? string.Empty : reader.GetString("event_sender_nick")
|
reader.IsDBNull(reader.GetOrdinal("event_sender_nick")) ? string.Empty : reader.GetString("event_sender_nick")
|
||||||
),
|
),
|
||||||
DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32("event_created")),
|
DateTimeOffset.FromUnixTimeSeconds(reader.GetInt32("event_created")),
|
||||||
|
|
88
SharpChat/EventStorage/MariaDBEventStorage_Permissions.cs
Normal file
88
SharpChat/EventStorage/MariaDBEventStorage_Permissions.cs
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
namespace SharpChat.EventStorage;
|
||||||
|
public partial class MariaDBEventStorage {
|
||||||
|
public static UserPermissions FromStoredPermissions(StoredUserPermissions sup) {
|
||||||
|
UserPermissions perms = 0;
|
||||||
|
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.KickUser))
|
||||||
|
perms |= UserPermissions.KickUser;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.BanUser))
|
||||||
|
perms |= UserPermissions.BanUser;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.Broadcast))
|
||||||
|
perms |= UserPermissions.Broadcast;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.SetOwnNickname))
|
||||||
|
perms |= UserPermissions.SetOwnNickname;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.SetOthersNickname))
|
||||||
|
perms |= UserPermissions.SetOthersNickname;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.CreateChannel))
|
||||||
|
perms |= UserPermissions.CreateChannel;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.DeleteChannel))
|
||||||
|
perms |= UserPermissions.DeleteChannel;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.SetChannelPermanent))
|
||||||
|
perms |= UserPermissions.SetChannelPermanent;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.SetChannelPassword))
|
||||||
|
perms |= UserPermissions.SetChannelPassword;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.SetChannelHierarchy))
|
||||||
|
perms |= UserPermissions.SetChannelHierarchy;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.JoinAnyChannel))
|
||||||
|
perms |= UserPermissions.JoinAnyChannel;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.SendMessage))
|
||||||
|
perms |= UserPermissions.SendMessage;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.DeleteOwnMessage))
|
||||||
|
perms |= UserPermissions.DeleteOwnMessage;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.DeleteAnyMessage))
|
||||||
|
perms |= UserPermissions.DeleteAnyMessage;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.EditOwnMessage))
|
||||||
|
perms |= UserPermissions.EditOwnMessage;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.EditAnyMessage))
|
||||||
|
perms |= UserPermissions.EditAnyMessage;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.SeeIPAddress))
|
||||||
|
perms |= UserPermissions.SeeIPAddress;
|
||||||
|
if(sup.HasFlag(StoredUserPermissions.ViewLogs))
|
||||||
|
perms |= UserPermissions.ViewLogs;
|
||||||
|
|
||||||
|
return perms;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static StoredUserPermissions ToStoredPermissions(UserPermissions up) {
|
||||||
|
StoredUserPermissions perms = 0;
|
||||||
|
|
||||||
|
if(up.HasFlag(UserPermissions.KickUser))
|
||||||
|
perms |= StoredUserPermissions.KickUser;
|
||||||
|
if(up.HasFlag(UserPermissions.BanUser))
|
||||||
|
perms |= StoredUserPermissions.BanUser;
|
||||||
|
if(up.HasFlag(UserPermissions.Broadcast))
|
||||||
|
perms |= StoredUserPermissions.Broadcast;
|
||||||
|
if(up.HasFlag(UserPermissions.SetOwnNickname))
|
||||||
|
perms |= StoredUserPermissions.SetOwnNickname;
|
||||||
|
if(up.HasFlag(UserPermissions.SetOthersNickname))
|
||||||
|
perms |= StoredUserPermissions.SetOthersNickname;
|
||||||
|
if(up.HasFlag(UserPermissions.CreateChannel))
|
||||||
|
perms |= StoredUserPermissions.CreateChannel;
|
||||||
|
if(up.HasFlag(UserPermissions.DeleteChannel))
|
||||||
|
perms |= StoredUserPermissions.DeleteChannel;
|
||||||
|
if(up.HasFlag(UserPermissions.SetChannelPermanent))
|
||||||
|
perms |= StoredUserPermissions.SetChannelPermanent;
|
||||||
|
if(up.HasFlag(UserPermissions.SetChannelPassword))
|
||||||
|
perms |= StoredUserPermissions.SetChannelPassword;
|
||||||
|
if(up.HasFlag(UserPermissions.SetChannelHierarchy))
|
||||||
|
perms |= StoredUserPermissions.SetChannelHierarchy;
|
||||||
|
if(up.HasFlag(UserPermissions.JoinAnyChannel))
|
||||||
|
perms |= StoredUserPermissions.JoinAnyChannel;
|
||||||
|
if(up.HasFlag(UserPermissions.SendMessage))
|
||||||
|
perms |= StoredUserPermissions.SendMessage;
|
||||||
|
if(up.HasFlag(UserPermissions.DeleteOwnMessage))
|
||||||
|
perms |= StoredUserPermissions.DeleteOwnMessage;
|
||||||
|
if(up.HasFlag(UserPermissions.DeleteAnyMessage))
|
||||||
|
perms |= StoredUserPermissions.DeleteAnyMessage;
|
||||||
|
if(up.HasFlag(UserPermissions.EditOwnMessage))
|
||||||
|
perms |= StoredUserPermissions.EditOwnMessage;
|
||||||
|
if(up.HasFlag(UserPermissions.EditAnyMessage))
|
||||||
|
perms |= StoredUserPermissions.EditAnyMessage;
|
||||||
|
if(up.HasFlag(UserPermissions.SeeIPAddress))
|
||||||
|
perms |= StoredUserPermissions.SeeIPAddress;
|
||||||
|
if(up.HasFlag(UserPermissions.ViewLogs))
|
||||||
|
perms |= StoredUserPermissions.ViewLogs;
|
||||||
|
|
||||||
|
return perms;
|
||||||
|
}
|
||||||
|
}
|
24
SharpChat/EventStorage/StoredUserPermissions.cs
Normal file
24
SharpChat/EventStorage/StoredUserPermissions.cs
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
namespace SharpChat.EventStorage;
|
||||||
|
|
||||||
|
[Flags]
|
||||||
|
public enum StoredUserPermissions : int {
|
||||||
|
KickUser = 0x00000001,
|
||||||
|
BanUser = 0x00000002,
|
||||||
|
//SilenceUser = 0x00000004,
|
||||||
|
Broadcast = 0x00000008,
|
||||||
|
SetOwnNickname = 0x00000010,
|
||||||
|
SetOthersNickname = 0x00000020,
|
||||||
|
CreateChannel = 0x00000040,
|
||||||
|
DeleteChannel = 0x00010000,
|
||||||
|
SetChannelPermanent = 0x00000080,
|
||||||
|
SetChannelPassword = 0x00000100,
|
||||||
|
SetChannelHierarchy = 0x00000200,
|
||||||
|
JoinAnyChannel = 0x00020000,
|
||||||
|
SendMessage = 0x00000400,
|
||||||
|
DeleteOwnMessage = 0x00000800,
|
||||||
|
DeleteAnyMessage = 0x00001000,
|
||||||
|
EditOwnMessage = 0x00002000,
|
||||||
|
EditAnyMessage = 0x00004000,
|
||||||
|
SeeIPAddress = 0x00008000,
|
||||||
|
ViewLogs = 0x00040000,
|
||||||
|
}
|
|
@ -1,23 +1,26 @@
|
||||||
namespace SharpChat;
|
namespace SharpChat;
|
||||||
|
|
||||||
[Flags]
|
[Flags]
|
||||||
public enum UserPermissions : int {
|
public enum UserPermissions : ulong {
|
||||||
KickUser = 0x00000001,
|
SendMessage = 1ul,
|
||||||
BanUser = 0x00000002,
|
DeleteOwnMessage = 1ul << 2,
|
||||||
Broadcast = 0x00000008,
|
DeleteAnyMessage = 1ul << 3,
|
||||||
SetOwnNickname = 0x00000010,
|
EditOwnMessage = 1ul << 4,
|
||||||
SetOthersNickname = 0x00000020,
|
EditAnyMessage = 1ul << 5,
|
||||||
CreateChannel = 0x00000040,
|
Broadcast = 1ul << 6,
|
||||||
DeleteChannel = 0x00010000,
|
ViewLogs = 1ul << 7,
|
||||||
SetChannelPermanent = 0x00000080,
|
|
||||||
SetChannelPassword = 0x00000100,
|
KickUser = 1ul << 10,
|
||||||
SetChannelHierarchy = 0x00000200,
|
BanUser = 1ul << 11,
|
||||||
JoinAnyChannel = 0x00020000,
|
SeeIPAddress = 1ul << 12,
|
||||||
SendMessage = 0x00000400,
|
|
||||||
DeleteOwnMessage = 0x00000800,
|
CreateChannel = 1ul << 20,
|
||||||
DeleteAnyMessage = 0x00001000,
|
SetChannelPermanent = 1ul << 21,
|
||||||
EditOwnMessage = 0x00002000,
|
SetChannelPassword = 1ul << 22,
|
||||||
EditAnyMessage = 0x00004000,
|
SetChannelHierarchy = 1ul << 23,
|
||||||
SeeIPAddress = 0x00008000,
|
DeleteChannel = 1ul << 24,
|
||||||
ViewLogs = 0x00040000,
|
JoinAnyChannel = 1ul << 25,
|
||||||
|
|
||||||
|
SetOwnNickname = 1ul << 30,
|
||||||
|
SetOthersNickname = 1ul << 31,
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue