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;
|
||||
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;
|
||||
|
||||
// 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_rank", senderRank),
|
||||
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"),
|
||||
ColourInheritable.FromMisuzu(reader.GetInt32("event_sender_colour")),
|
||||
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")
|
||||
),
|
||||
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;
|
||||
|
||||
[Flags]
|
||||
public enum UserPermissions : int {
|
||||
KickUser = 0x00000001,
|
||||
BanUser = 0x00000002,
|
||||
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,
|
||||
public enum UserPermissions : ulong {
|
||||
SendMessage = 1ul,
|
||||
DeleteOwnMessage = 1ul << 2,
|
||||
DeleteAnyMessage = 1ul << 3,
|
||||
EditOwnMessage = 1ul << 4,
|
||||
EditAnyMessage = 1ul << 5,
|
||||
Broadcast = 1ul << 6,
|
||||
ViewLogs = 1ul << 7,
|
||||
|
||||
KickUser = 1ul << 10,
|
||||
BanUser = 1ul << 11,
|
||||
SeeIPAddress = 1ul << 12,
|
||||
|
||||
CreateChannel = 1ul << 20,
|
||||
SetChannelPermanent = 1ul << 21,
|
||||
SetChannelPassword = 1ul << 22,
|
||||
SetChannelHierarchy = 1ul << 23,
|
||||
DeleteChannel = 1ul << 24,
|
||||
JoinAnyChannel = 1ul << 25,
|
||||
|
||||
SetOwnNickname = 1ul << 30,
|
||||
SetOthersNickname = 1ul << 31,
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue