From 0997b5bd5d67eaf737282bacb37e700d4bafbf87 Mon Sep 17 00:00:00 2001 From: Twitchy Date: Mon, 11 Jul 2011 20:33:03 +1200 Subject: [PATCH] Adds group manager, editable only by DB program. --- TShockAPI/DB/GroupManager.cs | 111 ++++++++++++++++++++++++++++++++++- TShockAPI/Group.cs | 3 +- TShockAPI/TShockAPI.csproj | 2 +- TShockAPI/Tools.cs | 81 +++---------------------- 4 files changed, 121 insertions(+), 76 deletions(-) diff --git a/TShockAPI/DB/GroupManager.cs b/TShockAPI/DB/GroupManager.cs index b432bf3a..1aea341e 100644 --- a/TShockAPI/DB/GroupManager.cs +++ b/TShockAPI/DB/GroupManager.cs @@ -11,14 +11,123 @@ namespace TShockAPI.DB { private IDbConnection database; + public List groups = new List(); + public GroupManager(IDbConnection db) { database = db; + + using (var com = database.CreateCommand()) + { + com.CommandText = + "CREATE TABLE IF NOT EXISTS 'GroupList' ('ID' INTEGER PRIMARY KEY UNIQUE, 'GroupName' TEXT UNIQUE, 'Commands' TEXT, 'OrderBy' TEXT);"; + com.ExecuteNonQuery(); + + com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; + com.AddParameter("@groupname", "trustedadmin"); + com.AddParameter("@commands", "maintenance,cfg,butcher,cheat,immunetoban,ignorecheatdetection,ignoregriefdetection,usebanneditem"); + com.AddParameter("@order", "1"); + com.ExecuteNonQuery(); + com.Parameters.Clear(); + + com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; + com.AddParameter("@groupname", "admin"); + com.AddParameter("@commands", "ban,unban,whitelist,causeevents,spawnboss,spawnmob,managewarp,time,tp,pvpfun,kill,logs,immunetokick,tphere"); + com.AddParameter("@order", "2"); + com.ExecuteNonQuery(); + com.Parameters.Clear(); + + com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; + com.AddParameter("@groupname", "newadmin"); + com.AddParameter("@commands", "kick,editspawn,reservedslot"); + com.AddParameter("@order", "3"); + com.ExecuteNonQuery(); + com.Parameters.Clear(); + + com.CommandText = "INSERT OR IGNORE INTO GroupList (GroupName, Commands, OrderBy) VALUES (@groupname, @commands, @order);"; + com.AddParameter("@groupname", "default"); + com.AddParameter("@commands", "canwater,canlava,warp,manageusers"); + com.AddParameter("@order", "4"); + com.ExecuteNonQuery(); + com.Parameters.Clear(); + + LoadPermisions(); + } } public bool GroupExists(string group) { - return true; + try + { + using (var com = database.CreateCommand()) + { + com.CommandText = "SELECT * FROM Grouplist WHERE GroupName=@groupname"; + com.AddParameter("@groupname", group); + using (var reader = com.ExecuteReader()) + { + while (reader.Read()) + if (reader.Get("GroupName") == group) + return true; + } + } + } + catch (SqliteExecutionException ex) + { + Log.Error(ex.ToString()); + } + return false; + } + + public void LoadPermisions() + { + groups = new List(); + groups.Add(new SuperAdminGroup()); + + try + { + using (var com = database.CreateCommand()) + { + com.CommandText = "SELECT * FROM Grouplist;"; + using (var reader = com.ExecuteReader()) + { + while (reader.Read()) + { + Group group = null; + string groupname = reader.Get("GroupName"); + int order = Int32.Parse(reader.Get("OrderBy")); + group = new Group(groupname); + group.Order = order; + + //Inherit Given commands + foreach (string perm in reader.Get("Commands").Split(',')) + { + group.AddPermission(perm); + } + + groups.Add(group); + } + } + + //Inherit all commands from group below in order, unless Order is 0 (unique groups anyone) + foreach (Group group in groups) + { + if (group.Order != 0 && group.Order < groups.Count) + { + for (int i = group.Order + 1; i < groups.Count; i++) + { + for (int j = 0; j < groups[i].permissions.Count; j++) + { + group.AddPermission(groups[i].permissions[j]); + } + } + } + } + } + } + catch (SqliteExecutionException ex) + { + Log.Error(ex.ToString()); + } } } } diff --git a/TShockAPI/Group.cs b/TShockAPI/Group.cs index 62c2c39c..87b9b9f9 100644 --- a/TShockAPI/Group.cs +++ b/TShockAPI/Group.cs @@ -22,11 +22,12 @@ namespace TShockAPI { public class Group { - private readonly List permissions = new List(); + public readonly List permissions = new List(); private readonly List negatedpermissions = new List(); public string Name { get; protected set; } public Group Parent { get; protected set; } + public int Order { get; set; } public Group(string groupname, Group parentgroup = null) { diff --git a/TShockAPI/TShockAPI.csproj b/TShockAPI/TShockAPI.csproj index d3ea1876..99a908d3 100644 --- a/TShockAPI/TShockAPI.csproj +++ b/TShockAPI/TShockAPI.csproj @@ -152,7 +152,7 @@ - +