我试图确定一个目录是否具有以下功能的指定权限:
@user.update_attributes({:password => params[:password], :password_confirmation => params[:password_confirmation]})
用法示例:
Public Function DirectoryHasRights(ByVal directoryPath As String,
ByVal rights As FileSystemRights,
ByVal accessControlType As AccessControlType) As Boolean
Dim dInfo As DirectoryInfo = New DirectoryInfo(directoryPath)
Dim user As WindowsIdentity = WindowsIdentity.GetCurrent
Dim principle As WindowsPrincipal = DirectCast(Thread.CurrentPrincipal, WindowsPrincipal)
Dim acl As AuthorizationRuleCollection =
dInfo.GetAccessControl.GetAccessRules(True, True, GetType(SecurityIdentifier))
For Each rule As FileSystemAccessRule In acl
If user.User.Equals(rule.IdentityReference) Or
principle.IsInRole(DirectCast(rule.IdentityReference, SecurityIdentifier)) Then
If rule.AccessControlType.Equals(accessControlType) Then
If rule.FileSystemRights.HasFlag(rights) Then
Return True
End If
End If
End If
Next
Return False
End Function
我遇到的问题是,我尝试检查每个用户权限的Dim hasRights As Boolean =
DirectoryHasRights("C:\Test Folder\",
FileSystemRights.Read Or FileSystemRights.Write,
AccessControlType.Allow)
规则和AccessControlType.Allow
规则。我的意思是,例如我设置一个目录来拒绝我 FullControl ,我确保我无法访问该文件夹,但迭代规则的For循环得到一个规则,其中 FullControl 是允许的,还有另一条规则,其中 FullControl 对我当前的用户都被拒绝,这怎么可能?
我如何解决这个问题?。
所以我将@Olivier Jacot-Descombes readelf(1) 翻译成了Vb.Net,并对其进行了调整以检查AccessControlType.Deny
或AccessControlType.Allow
,但是下面的函数没有按预期工作。
如果我拒绝读取用户权限到文件夹,那么我使用多个标记调用下面的函数,我总是得到 True :
AccessControlType.Deny
它应该返回False,因为我无法从该文件夹中读取。似乎该函数没有比较多个标志。
我如何解决它?。
源代码
DirectoryHasRights("C:\Test Folder\",
FileSystemRights.Read Or FileSystemRights.Write,
AccessControlType.Allow)