c# - 文件权限不继承目录权限

标签 c# security permissions file-permissions

我有一个程序可以为用户输出创建一个安全目录。这工作正常,但我在其中创建(或复制到其中)的文件最终只有管理员访问权限。

 DirectoryInfo outputDirectory =
            baseOutputDirectory.CreateSubdirectory(outputDirectoryName,
            GetDirectorySecurity(searchHits.Request.UserId));

 ...

private DirectorySecurity GetDirectorySecurity(string owner)
{
    const string LOG_SOURCE = "GetDirectorySecurity";
    DirectorySecurity ds = new DirectorySecurity();

    System.Security.Principal.NTAccount ownerAccount = 
        new System.Security.Principal.NTAccount(owner);

    ds.SetOwner(ownerAccount);

    ds.AddAccessRule(
        new FileSystemAccessRule(owner, 
        FileSystemRights.FullControl,
        AccessControlType.Allow));

    //AdminUsers is a List<string> that contains a list from configuration
    //  That represents the admins who should be allowed
    foreach (string adminUser in AdminUsers)
    {
        ds.AddAccessRule(
            new FileSystemAccessRule(adminUser,
            FileSystemRights.FullControl,
            AccessControlType.Allow));
    }
    return ds;
}

/// <summary>
/// This method copies any static supporting files, such as javascripts
/// </summary>
/// <param name="outputDirectory"></param>
private void CopySupportingFiles(DirectoryInfo outputDirectory)
{
    foreach (FileInfo file in SupportingFiles)
    {
        file.CopyTo(
            Path.Combine(outputDirectory.FullName, file.Name));
    }
}

等等等等

我做错了什么?为什么权限不级联?

最佳答案

看起来你应该在设置 DirectorySecurity 时设置 InheritanceFlagsPropagationFlags(我相信它会覆盖你手动设置的任何内容).

private DirectorySecurity GetDirectorySecurity(string owner)
{
    const string LOG_SOURCE = "GetDirectorySecurity";
    DirectorySecurity ds = new DirectorySecurity();

    System.Security.Principal.NTAccount ownerAccount =
        new System.Security.Principal.NTAccount(owner);

    ds.SetOwner(ownerAccount);

    ds.AddAccessRule(
        new FileSystemAccessRule(owner,
        FileSystemRights.FullControl,
        InheritanceFlags.ObjectInherit, 
        PropagationFlags.InheritOnly,
        AccessControlType.Allow));

    //AdminUsers is a List<string> that contains a list from configuration
    //  That represents the admins who should be allowed
    foreach (string adminUser in AdminUsers)
    {
        ds.AddAccessRule(
            new FileSystemAccessRule(adminUser,
            FileSystemRights.FullControl,
            InheritanceFlags.ObjectInherit,
            PropagationFlags.InheritOnly,
            AccessControlType.Allow));
    }
    return ds;
}

关于c# - 文件权限不继承目录权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1532014/

相关文章:

c# - 从服务执行 shell 命令

android - 为什么我的应用在安装时请求媒体权限?

php - 应用 Magento SUPEE 6285 后拒绝访问

java - Java 中的安全 TCP 连接

android - 未经授权的 API 调用 - 保护并只允许注册的前端应用

javascript - Node.js 进程内 jsRender 的安全问题

php - CakePHP 连接查询

c# - AutoMapper 4.2 和 Ninject 3.2

c# - 用户控件上 UpdatePanel 的替代品(ASCX 页面)

c# - 换行符在 MailMessage 的正文中不起作用