我的VB.NET应用程序构建限制访问的目录树。
访问应该是一个正常的用户无法删除或重命名现有的树。 但是,用户可以在任何地方树添加新的文件/文件夹。 用户创建文件/文件夹应该是任何用户完全可修改。
我遇到的问题是越来越访问设置,以便由应用程序创建的文件/文件夹不能更改,但用户创建的文件/文件夹可以被任何用户都可以改变。
什么是目前发生的事情,是由应用程序发出的文件/文件夹的行为正确。 但是,当用户创建自己的文件/文件夹,该文件的/文件夹的权限,只列出当前用户。 因此,其他用户(存在的应用程序,甚至系统管理员创建的文件/文件夹)不能查看或修改该用户创建文件/文件夹。
目前代码:(当用户创建文件/文件夹本身,这个代码不给访问用户组或AdminGroup的,只有谁刚刚创建的文件/文件夹的用户)
FolderAcl.AddAccessRule(New FileSystemAccessRule(UserGroup,
FileSystemRights.ReadAndExecute,
InheritanceFlags.None, PropagationFlags.None,
AccessControlType.Allow))
FolderAcl.AddAccessRule(New FileSystemAccessRule(UserGroup,
FileSystemRights.Write,
InheritanceFlags.None, PropagationFlags.None,
AccessControlType.Allow))
FolderAcl.AddAccessRule(New FileSystemAccessRule(AdminGroup,
FileSystemRights.FullControl,
InheritanceFlags.None, PropagationFlags.None,
AccessControlType.Allow))
FolderAcl.SetAccessRuleProtection(True, False)
另一种尝试:(当用户创建文件/文件夹本身,这个代码可以访问用户组和AdminGroup的,但并没有给访问用户的用户是用户组,用户组,但不具有删除或修改权限等等。如果用户创建文件/文件夹,他们甚至不能命名。)
' same code as above except...
InheritanceFlags.None ---> InheritanceFlags.Container or InheritanceFlags.Object
我已经试过InheritanceFlags和PropagationFlags,但没有运气的其他组合呢。
有任何想法吗?
谢谢,迈克
更新:
您可以在任何时候中断继承并决定离开继承的访问规则的副本或使用删除
SetAccessRuleProtection(True, True)
首先布尔参数,如果属实,会断开继承保护,第二,如果属实,不断的访问规则的副本,这样你可以删除只有那些你不想要的。
下面的例子应该反映你的文件夹结构评论:
' folder structure
'
'---Level1
' |
' ---Level2
' |
' ---Level3
'set access rules at level1 with inheritance
Dim Level1DirSec As DirectorySecurity = Directory.GetAccessControl("c:\level1")
Level1DirSec.AddAccessRule(New FileSystemAccessRule(New System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.BuiltinAdministratorsSid, Nothing),
FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow))
Level1DirSec.AddAccessRule(New FileSystemAccessRule(New System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.AuthenticatedUserSid, Nothing),
FileSystemRights.ReadAndExecute,
InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow))
Directory.SetAccessControl("c:\level1\", Level1DirSec)
' break inheritance at level3 and remove access rule for authenticated user group
Dim Level3DirSec As DirectorySecurity = Directory.GetAccessControl("c:\level1\level2\level3")
Level3DirSec.SetAccessRuleProtection(True, True)
Level3DirSec.RemoveAccessRuleAll(New FileSystemAccessRule(New System.Security.Principal.SecurityIdentifier(System.Security.Principal.WellKnownSidType.AuthenticatedUserSid, Nothing), FileSystemRights.ReadAndExecute, AccessControlType.Allow))
Directory.SetAccessControl("c:\level1\level2\level3", Level3DirSec)
您可以使用WellKnownSid指定组,并设置其与继承你的根文件夹:
FolderAcl.AddAccessRule(New FileSystemAccessRule(New System.Security.Principal.SecurityIdentifier(WellKnownSidType.AuthenticatedUserSid, Nothing),
FileSystemRights.ReadAndExecute,
InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow))
FolderAcl.AddAccessRule(New FileSystemAccessRule(New System.Security.Principal.SecurityIdentifier(WellKnownSidType.BuiltinAdministratorsSid, Nothing),
FileSystemRights.FullControl,
InheritanceFlags.ContainerInherit + InheritanceFlags.ObjectInherit,
PropagationFlags.None,
AccessControlType.Allow))
这将会给所有通过认证的用户R / W访问以及完全访问管理员组到您的根文件夹和所有子文件夹和文件。
文章来源: VB.NET app is setting restricted file permissions on a directory, which is incorrectly restricting user created files in the same directory