Я иногда переношу некоторые веб-сайты с одного веб-сервера на другой.сравнить права доступа к файлам Windows (или папке)
После копирования всех файлов со старого сервера на новый сервер мне потребуется некоторое время, чтобы узнать, какие папки или файлы должны быть доступны для записи IIS. (Звучит знакомо, кстати? :))
Я написал приложение WinForms, которое позволяет мне выбрать стартовый каталог. Приложение должно (рекурсивно) сравнивать, если разрешения безопасности каждого файла/каталога равны требованиям безопасности его родительского каталога.
Я хочу использовать это приложение на старом сервере для сканирования каталогов с разными разрешениями.
Пример:C:\MySites\Uploads does not have the same permissions set as its parent directory.
(. Эта папка была доступна для записи пользователя IIS «IUSR», в то время как его родительская папка только для чтения)
Приложение почти полное в том смысле, что мне удается пройти все каталоги и файлы. Мне просто нужно сравнить их разрешения!
Не могли бы вы помочь? Вот выдержка из того, где мне нужна ваша помощь.
string results = "";
string parentFolderPath = "c:\\someParentDir";
string childItemPath = "c:\\someParentDir\\SomeChildDir.ext";
DirectorySecurity parentFolderAccessControl = Directory.GetAccessControl(parentFolderPath);
DirectorySecurity childItemAccessControl = Directory.GetAccessControl(childItemPath);
if (!parentFolderAccessControl.Equals(childItemAccessControl)) // <-- D'oh here
{
results += childItemPath + " does not have the same permissions set as its parent directory.\n";
}
The if
всегда верно, потому что DirectorySecurities никогда не равны. (Я понимаю, почему это так: ссылка на разные распределения памяти ... бла-бла.) Но какой будет лучший способ сравнить DirectorySecurities?
Я думаю, что этот ответ, вероятно, поможет вам. http://stackoverflow.com/a/1281638/1181408 По сути, вы хотите вызвать GetAccessRules на своих объектах DirectorySecurity, а затем перебрать полученную коллекцию. – cgotberg
@cgotberg Это звучит довольно дорого. Получите обе коллекции. Проверьте, существуют ли пользователи в коллекции1 в коллекции2 и наоборот. И затем для проверки пользователя, если доступ равен. Это была моя отправная точка, но я надеюсь, что у кого-то есть лучшее решение. –
Я полагаю, что это дорого, но в этой концепции изредка приходится мигрировать код, вероятно, это не имеет значения. Вы можете использовать этот общий код .net для сравнения объектов, чтобы сделать глубокое сравнение, и это, вероятно, так дорого, как когда-либо. http://comparenetobjects.codeplex.com/ – cgotberg