powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как проверить права на директорию?
13 сообщений из 13, страница 1 из 1
Как проверить права на директорию?
    #38746562
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
очень простой вопрос, но тем не менее толкового решения я не нашел. Есть директория Dir - надо понять можно туда записывать файлы или нет из текущего процесса.
Нашел пару решений через Directory.GetAccessControl(path);, но там слишком муторно потом с пользователями, т.к. дает все права.
Неужели try - catch делать..
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746571
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
короче набросал такой код:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
public static bool HasWritePermissionOnDir(string path)
		{
			var writeAllow = false;
			var writeDeny = false;
			var accessControlList = Directory.GetAccessControl(path);
			var accessRules = accessControlList.GetAccessRules(true, true,typeof(SecurityIdentifier));
			foreach (FileSystemAccessRule rule in accessRules)
			{
				if (((FileSystemRights.Write & rule.FileSystemRights) != FileSystemRights.Write) || rule.IdentityReference != WindowsIdentity.GetCurrent().User)
					continue;
				if (rule.AccessControlType == AccessControlType.Allow)
					writeAllow = true;
				else if (rule.AccessControlType == AccessControlType.Deny)
					writeDeny = true;
			}

			return writeAllow && !writeDeny;
		}


смущает WindowsIdentity.GetCurrent() - всегда ли он будет не null. Если выключена авторизация wcf не упадет ли это все нахер?
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746604
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan, тут не учитываются группы так что код не полный. Еще один недостаток данного подхода то, что возможна ситуация когда функция HasWritePermissionOnDir вернет true, а операция записи упадет с исклечением потому в промежутке между ними права были изменены. И значит тебе все равно нужно быть готовым к исключению. Поэтому проще и правильнее попытаться выполнить запись и ловить UnauthorizedAccessException.

Маловероятно что WindowsIdentity.GetCurrent() вернет null т.к. процесс всегда выполняется от имени какого-то пользователя.
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746632
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... та часть моего "я", которая бывший злобный сисадмин, рекомендует попользоваться внешними утилитами: либо subinacl.exe (до хр/2003), либо icacls , которые выводят все разрешения/владельцев и пр., нужно только распарсить вывод командной строки ...
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746645
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotik, в данном контексте идея использовать внешную программу для программы считаю неудачной т.к. это решение будет зря тратить память, замедлять программу (создание процесса в Windows - дорогое удовольствие) и не решает проблему с "окном" изменения прав между успешной проверкой и неудачной записью.
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746654
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
carrotikбывший злобный сисадмин, рекомендует попользоваться внешними утилитами: либо subinacl.exe (до хр/2003), либо icacls
Админа можешь отправить в лес собирать грибы. Задача решается через нативный Directory.GetAccessControl. Без каких-либо левых подпорок.
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746726
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazilecarrotik, в данном контексте идея использовать внешную программу для программы считаю неудачной т.к. это решение будет зря тратить память, замедлять программу (создание процесса в Windows - дорогое удовольствие) и не решает проблему с "окном" изменения прав между успешной проверкой и неудачной записью.

...я не настаиваю никоим образом, но с другой стороны, если программер идет по пути "потыкаться где можно, где пустят - записать" - это тоже не совсем незатратный путь .. может, все же оптимальнее сразу писать туда, куда предусмотрено системой? (т.е. в пользовательские песочницы, включая папки All Users и им аналогичные) ?
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746732
carrotik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
codearticles.rucarrotikбывший злобный сисадмин, рекомендует попользоваться внешними утилитами: либо subinacl.exe (до хр/2003), либо icacls
Админа можешь отправить в лес собирать грибы. Задача решается через нативный Directory.GetAccessControl. Без каких-либо левых подпорок.

...указанные утилиты хотя и являются подпорками, но никак не левые, а от Майкрософт (ну, или поддерживаемые им) ...
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746786
codearticles.ru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
carrotik...указанные утилиты хотя и являются подпорками, но никак не левые, а от Майкрософт (ну, или поддерживаемые им) ...
"Левые подпорки" имелось ввиду по отношению к твоей программе.
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746850
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
carrotikесли программер идет по пути "потыкаться где можно, где пустят - записать" - это тоже не совсем незатратный путь
Я не понимаю почему ты решил что netivan "тыкается" в поисках каталога пригодного для записи. Единственное что мы пока знаем, так это что у него WCF сервис внутри которого необходимо организовать такую проверку. netivan, если не секрет, расскажи зачем тебе это понадобилось?
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746860
netivan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bazilecarrotikесли программер идет по пути "потыкаться где можно, где пустят - записать" - это тоже не совсем незатратный путь
Я не понимаю почему ты решил что netivan "тыкается" в поисках каталога пригодного для записи. Единственное что мы пока знаем, так это что у него WCF сервис внутри которого необходимо организовать такую проверку. netivan, если не секрет, расскажи зачем тебе это понадобилось?
для проверки - может ли приложение писать временные сборки в директорию:)
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746883
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan, чем каталог Temp не устраивает? Он всегда открыт для записи.
...
Рейтинг: 0 / 0
Как проверить права на директорию?
    #38746889
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
netivan, Path.GetTempPath() вернет нужный путь.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как проверить права на директорию?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]