From 7f2ff7614fe40d353a8ce6994cefe5afcb170b5d Mon Sep 17 00:00:00 2001 From: Zack Piispanen Date: Fri, 22 Jul 2011 16:29:29 -0400 Subject: [PATCH] Premissions now inherit from groups listed anywhere in the db, not just below them. TSDEV-39 --- TShockAPI/Group.cs | 44 ++++++++++++++++++++++++++++++-------------- 1 file changed, 30 insertions(+), 14 deletions(-) diff --git a/TShockAPI/Group.cs b/TShockAPI/Group.cs index 6016a87d..30c44272 100644 --- a/TShockAPI/Group.cs +++ b/TShockAPI/Group.cs @@ -45,6 +45,16 @@ namespace TShockAPI return true; if (Parent != null) return Parent.HasPermission(permission); + bool ret = false; + foreach( string g in permissions ) + { + if (TShock.Groups.GroupExists(g)) + { + ret = checkGroupForPermission(g, permission); + if (ret) + return true; + } + } return false; } @@ -55,27 +65,33 @@ namespace TShockAPI public void AddPermission(string permission) { - recursePermissions(permission, new List()); + permissions.Add(permission); } - public void recursePermissions( string permission, List used){ - if (used.Contains(permission)) + private bool checkGroupForPermission(String g, String permission ) + { + bool ret = false; + if( !TShock.Groups.GroupExists( g ) ) { - return; - } - else if( TShock.Groups.GroupExists( permission ) ) - { - used.Add(permission); - Group g = Tools.GetGroup(permission); - foreach (string perm in g.permissions) - { - recursePermissions(perm, used); - } + if( g.Equals(permission) ) + return true; } else { - permissions.Add(permission); + Group group = Tools.GetGroup(g); + foreach (String perm in group.permissions) + { + if( perm.Equals( permission ) ) + { + return true; + } + ret = checkGroupForPermission( perm, permission ); + + if( ret ) + return ret; + } } + return ret; } }