Fixed and closed #457: deleting a user or group also deletes related ACL entries.
This commit is contained in:
parent
446934322c
commit
eb7d19e8f6
2 changed files with 85 additions and 2 deletions
|
@ -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")]
|
||||
|
|
|
@ -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 {
|
|||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Lists all directories in a provider, including the root.
|
||||
/// </summary>
|
||||
/// <param name="provider">The provider.</param>
|
||||
/// <returns>The directories.</returns>
|
||||
private static List<string> ListDirectories(IFilesStorageProviderV30 provider) {
|
||||
List<string> directories = new List<string>(50);
|
||||
directories.Add("/");
|
||||
|
||||
ListDirectoriesRecursive(provider, "/", directories);
|
||||
|
||||
return directories;
|
||||
}
|
||||
|
||||
private static void ListDirectoriesRecursive(IFilesStorageProviderV30 provider, string current, List<string> output) {
|
||||
foreach(string dir in provider.ListDirectories(current)) {
|
||||
output.Add(dir);
|
||||
ListDirectoriesRecursive(provider, dir, output);
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes all permissions for a user.
|
||||
/// </summary>
|
||||
/// <param name="user">The user.</param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Removes all permissions for a group.
|
||||
/// </summary>
|
||||
/// <param name="group">The group.</param>
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Changes the Password of a User.
|
||||
/// </summary>
|
||||
|
@ -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) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue