MSALEH4869 Ответов: 1

Как получить расширенное разрешение каталога для конкретного пользователя?


Как получить расширенное разрешение каталога для конкретного пользователя?
Полный контроль
Траверс
ReadData
ReadAttributes
ReadExtendedAttributes
функция CreateFile
CreateDirectories
WriteAttributes
WriteExtendedAttributes
DeleteSubdirectoriesAndFiles
Удалить
ReadPermissions
ChangePermissions
TakeOwnership

Спасибо.

Что я уже пробовал:

Это код после обновления(применено решение)

Dim hasAccess As Boolean = False
     Dim acc As NTAccount = New NTAccount(lblPrincipal.Text)
     Dim secId As SecurityIdentifier = TryCast(acc.Translate(GetType(SecurityIdentifier)), SecurityIdentifier)
     Dim dirSec As DirectorySecurity = Directory.GetAccessControl(lblFolderPath.Text)
     Dim authRules As AuthorizationRuleCollection = dirSec.GetAccessRules(True, True, GetType(SecurityIdentifier))
     For Each ar As FileSystemAccessRule In authRules
         If secId.CompareTo(TryCast(ar.IdentityReference, SecurityIdentifier)) = 0 Then
             Dim fileSystemRights = ar.FileSystemRights
             Console.WriteLine(fileSystemRights)
             If fileSystemRights.HasFlag(FileSystemRights.FullControl) Then
                 chkFull.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.Traverse) Then
                 chkTraverse.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.ReadData) Then
                 chkReadData.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.ReadAttributes) Then
                 chkReadAttributes.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.ReadExtendedAttributes) Then
                 chkReadExtendedAttributes.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.CreateFiles) Then
                 chkCreateFiles.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.CreateDirectories) Then
                 chkCreateFolders.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.WriteAttributes) Then
                 chkWriteAttributes.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.WriteExtendedAttributes) Then
                 chkWriteExtendedAttributes.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.DeleteSubdirectoriesAndFiles) Then
                 chkDeleteSubfolders.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.Delete) Then
                 chkDelete.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.ReadPermissions) Then
                 chkReadPermission.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.ChangePermissions) Then
                 chkChangePermission.Checked = True
             End If
             If fileSystemRights.HasFlag(FileSystemRights.TakeOwnership) Then
                 chkTakeOwnership.Checked = True
             End If
         End If
     Next

1 Ответов

Рейтинг:
7

phil.o

FileSystemRights перечисление - это набор битовых флагов.
Класс FlagsAttribute[^]
Таким образом, вы должны немного изменить способ тестирования fileSystemRights переменная.

chkFull.Checked = fileSystemRights.HasFlag(FileSystemRights.FullControl)
chkTraverse.Checked = fileSystemRights.HasFlag(FileSystemRights.Traverse)
chkReadData.Checked = fileSystemRights.HasFlag(FileSystemRights.ReadData)
'' etc.

Надеюсь, это поможет.


MSALEH4869

Это прекрасно работает...Большое спасибо

phil.o

Добро пожаловать.
Вы не должны были редактировать код в своем вопросе, потому что теперь кому-то довольно трудно узнать, в чем была проблема в первую очередь и как она была решена.