-Improved group loading from the database:
--TShock will now attempt to load any available valid group data even if there are invalid records and will also report proper errors / warnings. --"superadmin" is now a reserved group name. --Groups with parents causing infinite parent loops, invaild parents, or parenting theirselfes will have their parent group reset. --Double definitions of groups with the same name are no longer allowed. --Group instances are now tried to be preserved instead of being recreated during a reload of the group data. -Added command "/group parent" to get and set the parent of groups. -REST Endpoint "/v2/groups/create" will no longer allow creating groups having theirselfes as parent. -REST Endpoint "/v2/groups/update" will no longer allow setting a group's parent to theirself or setting a parent group resulting in an infinite parent loop. -This commit should fix #482.
This commit is contained in:
parent
4d95b5594e
commit
b828299a1c
3 changed files with 202 additions and 64 deletions
|
|
@ -2047,6 +2047,57 @@ namespace TShockAPI
|
|||
}
|
||||
}
|
||||
#endregion
|
||||
return;
|
||||
|
||||
case "parent":
|
||||
#region Parent
|
||||
{
|
||||
if (args.Parameters.Count < 2)
|
||||
{
|
||||
args.Player.SendErrorMessage("Invalid syntax! Proper syntax: /group parent <group name> [new parent group name]");
|
||||
return;
|
||||
}
|
||||
|
||||
string groupName = args.Parameters[1];
|
||||
Group group = TShock.Groups.GetGroupByName(groupName);
|
||||
if (group == null)
|
||||
{
|
||||
args.Player.SendErrorMessage("No such group \"{0}\".", groupName);
|
||||
return;
|
||||
}
|
||||
|
||||
if (args.Parameters.Count > 2)
|
||||
{
|
||||
string newParentGroupName = string.Join(" ", args.Parameters.Skip(2));
|
||||
if (!string.IsNullOrWhiteSpace(newParentGroupName) && !TShock.Groups.GroupExists(newParentGroupName))
|
||||
{
|
||||
args.Player.SendErrorMessage("No such group \"{0}\".", newParentGroupName);
|
||||
return;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
TShock.Groups.UpdateGroup(groupName, newParentGroupName, group.Permissions, group.ChatColor);
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(newParentGroupName))
|
||||
args.Player.SendSuccessMessage("Parent of group \"{0}\" set to \"{1}\".", groupName, newParentGroupName);
|
||||
else
|
||||
args.Player.SendSuccessMessage("Removed parent of group \"{0}\".", groupName);
|
||||
}
|
||||
catch (GroupManagerException ex)
|
||||
{
|
||||
args.Player.SendErrorMessage(ex.Message);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (group.Parent != null)
|
||||
args.Player.SendSuccessMessage("Parent of \"{0}\" is \"{1}\".", group.Name, group.Parent.Name);
|
||||
else
|
||||
args.Player.SendSuccessMessage("Group \"{0}\" has no parent.", group.Name);
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
return;
|
||||
case "del":
|
||||
#region Delete group
|
||||
|
|
@ -2108,12 +2159,6 @@ namespace TShockAPI
|
|||
}
|
||||
#endregion
|
||||
return;
|
||||
case "help":
|
||||
args.Player.SendInfoMessage("Syntax: /group <command> [arguments]");
|
||||
args.Player.SendInfoMessage("Commands: add, addperm, del, delperm, list, listperm");
|
||||
args.Player.SendInfoMessage("Arguments: add <group name>, addperm <group name> <permissions...>, del <group name>");
|
||||
args.Player.SendInfoMessage("Arguments: delperm <group name> <permissions...>, list [page], listperm <group name> [page]");
|
||||
return;
|
||||
case "list":
|
||||
#region List groups
|
||||
{
|
||||
|
|
@ -2160,6 +2205,12 @@ namespace TShockAPI
|
|||
});
|
||||
}
|
||||
#endregion
|
||||
return;
|
||||
case "help":
|
||||
args.Player.SendInfoMessage("Syntax: /group <command> [arguments]");
|
||||
args.Player.SendInfoMessage("Commands: add, addperm, parent, del, delperm, list, listperm");
|
||||
args.Player.SendInfoMessage("Arguments: add <group name>, addperm <group name> <permissions...>, del <group name>");
|
||||
args.Player.SendInfoMessage("Arguments: delperm <group name> <permissions...>, list [page], listperm <group name> [page]");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue