diff --git a/AssemblyVersion.cs b/AssemblyVersion.cs
index 9431da0..9ee87f0 100644
--- a/AssemblyVersion.cs
+++ b/AssemblyVersion.cs
@@ -16,5 +16,5 @@ using System.Reflection;
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
-[assembly: AssemblyVersion("3.0.1.456")]
-[assembly: AssemblyFileVersion("3.0.1.456")]
+[assembly: AssemblyVersion("3.0.1.457")]
+[assembly: AssemblyFileVersion("3.0.1.457")]
diff --git a/Core/Users.cs b/Core/Users.cs
index 029a00b..2216b7d 100644
--- a/Core/Users.cs
+++ b/Core/Users.cs
@@ -228,6 +228,8 @@ namespace ScrewTurn.Wiki {
public static bool RemoveUser(UserInfo user) {
if(user.Provider.UserAccountsReadOnly) return false;
+ RemovePermissions(user);
+
bool done = user.Provider.RemoveUser(user);
if(done) {
Log.LogEntry("User " + user.Username + " removed", EntryType.General, Log.SystemUsername);
@@ -240,6 +242,85 @@ namespace ScrewTurn.Wiki {
}
}
+ ///
+ /// Lists all directories in a provider, including the root.
+ ///
+ /// The provider.
+ /// The directories.
+ private static List ListDirectories(IFilesStorageProviderV30 provider) {
+ List directories = new List(50);
+ directories.Add("/");
+
+ ListDirectoriesRecursive(provider, "/", directories);
+
+ return directories;
+ }
+
+ private static void ListDirectoriesRecursive(IFilesStorageProviderV30 provider, string current, List output) {
+ foreach(string dir in provider.ListDirectories(current)) {
+ output.Add(dir);
+ ListDirectoriesRecursive(provider, dir, output);
+ }
+ }
+
+ ///
+ /// Removes all permissions for a user.
+ ///
+ /// The user.
+ private static void RemovePermissions(UserInfo user) {
+ foreach(IFilesStorageProviderV30 prov in Collectors.FilesProviderCollector.AllProviders) {
+ foreach(string dir in ListDirectories(prov)) {
+ AuthWriter.RemoveEntriesForDirectory(user, prov, dir);
+ }
+ }
+
+ AuthWriter.RemoveEntriesForGlobals(user);
+
+ AuthWriter.RemoveEntriesForNamespace(user, null);
+ foreach(IPagesStorageProviderV30 prov in Collectors.PagesProviderCollector.AllProviders) {
+ foreach(PageInfo page in prov.GetPages(null)) {
+ AuthWriter.RemoveEntriesForPage(user, page);
+ }
+
+ foreach(NamespaceInfo nspace in prov.GetNamespaces()) {
+ AuthWriter.RemoveEntriesForNamespace(user, nspace);
+
+ foreach(PageInfo page in prov.GetPages(nspace)) {
+ AuthWriter.RemoveEntriesForPage(user, page);
+ }
+ }
+ }
+ }
+
+ ///
+ /// Removes all permissions for a group.
+ ///
+ /// The group.
+ private static void RemovePermissions(UserGroup group) {
+ foreach(IFilesStorageProviderV30 prov in Collectors.FilesProviderCollector.AllProviders) {
+ foreach(string dir in ListDirectories(prov)) {
+ AuthWriter.RemoveEntriesForDirectory(group, prov, dir);
+ }
+ }
+
+ AuthWriter.RemoveEntriesForGlobals(group);
+
+ AuthWriter.RemoveEntriesForNamespace(group, null);
+ foreach(IPagesStorageProviderV30 prov in Collectors.PagesProviderCollector.AllProviders) {
+ foreach(PageInfo page in prov.GetPages(null)) {
+ AuthWriter.RemoveEntriesForPage(group, page);
+ }
+
+ foreach(NamespaceInfo nspace in prov.GetNamespaces()) {
+ AuthWriter.RemoveEntriesForNamespace(group, nspace);
+
+ foreach(PageInfo page in prov.GetPages(nspace)) {
+ AuthWriter.RemoveEntriesForPage(group, page);
+ }
+ }
+ }
+ }
+
///
/// Changes the Password of a User.
///
@@ -415,6 +496,8 @@ namespace ScrewTurn.Wiki {
public static bool RemoveUserGroup(UserGroup group) {
if(group.Provider.UserGroupsReadOnly) return false;
+ RemovePermissions(group);
+
bool done = group.Provider.RemoveUserGroup(group);
if(done) {