У меня проблемы с скрытием моей основной формы для формы входа. Когда пользователь вошел в систему, чтобы закрыть форму входа и показать основную форму.
Я запутался, что сильно удалил весь код и начал заново. Я могу нормально скрыть форму входа.
Мне не удалось скрыть основную форму, вызванную с помощью
Application.Run(new MainForm());
Форма входа выглядит следующим образом: BUILTIN \ IIS_IUSRS: Разрешить: ReadAndExecute, Синхронизировать BUILTIN \ IIS_IUSRS: Разрешить: -1610612736 ...
Я получаю дубликат FileSystemAccessRule из приведенного ниже кода:
C:\inetpub\wwwroot\AspInfo\Account
BUILTIN\IIS_IUSRS : Allow : ReadAndExecute, Synchronize
BUILTIN\IIS_IUSRS : Allow : -1610612736
NT SERVICE\TrustedInstaller : Allow : FullControl
NT SERVICE\TrustedInstaller : Allow : 268435456
, и я не могу понять, что и почему.
И отображаемые разрешения не соответствуют тому, что я вижу Свойства файла FileManager. Например, как найти разрешение «Список содержимого папки» из этой или аналогичной итерации. Если кто-нибудь знает пример в документации .NET, это будет полезно.
protected void directoryInfo()
{
var di = new DirectoryInfo(Server.MapPath("/"));
foreach (DirectoryInfo dir in di.GetDirectories())
{
Response.Write(dir.FullName + "<br/>");
DirectorySecurity ds = dir.GetAccessControl();
foreach (FileSystemAccessRule fsar in ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
string userName = fsar.IdentityReference.Value;
string userRights = fsar.FileSystemRights.ToString();
string userAccessType = fsar.AccessControlType.ToString();
Response.Write(userName + " : " + userAccessType + " : " + userRights + "<br/>");
}
}
}
Вы получите отдельные записи правил для унаследованных правил и для правил, явно установленных для этой папки. Также есть разница в зависимости от настроек распространения для каждого правила. Например, у вас может быть один набор разрешений, установленный для распространения на вложенные папки, и другой набор для файлов внутри папки. Ваш код также получает правила аудита (SACL) для папки, а вам, похоже, нужны только разрешения доступа (DACL).
Попробуйте следующее:
protected void directoryInfo()
{
var di = new DirectoryInfo(Server.MapPath("/"));
foreach (DirectoryInfo dir in di.GetDirectories())
{
Response.Write(dir.FullName + "<br/>");
DirectorySecurity ds = dir.GetAccessControl(AccessControlSections.Access);
foreach (FileSystemAccessRule fsar in ds.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))
{
string userName = fsar.IdentityReference.Value;
string userRights = fsar.FileSystemRights.ToString();
string userAccessType = fsar.AccessControlType.ToString();
string ruleSource = fsar.IsInherited ? "Inherited" : "Explicit";
string rulePropagation = fsar.PropagationFlags.ToString();
string ruleInheritance = fsar.InheritanceFlags.ToString();
Response.Write(userName + " : " + userAccessType + " : " + userRights + " : " + ruleSource + " : " + rulePropagation + " : " + ruleInheritance + "<br/>");
}
}
}
Разрешение ReadAndExecute
, которое вы видите, включает разрешение "List Folder Contents". Вы можете проверить наличие отдельных разрешений, используя соответствующий флаг в перечислении FileSystemRights. For example:
if (fsar.FileSystemRights && FileSystemRights.ListDirectory)
Console.WriteLine("Has List Directory permission");