您的位置:首页 > 编程语言 > C#

C#设置与获取目录权限(.net控制ACL)

2016-10-19 16:03 441 查看
想用c#来设置和读取ntfs分区上的目录权限,找了很多资料,未果。终于发现了一段vb.net的代码,做了修改,以C#展示给大家。

using System;

using System.Collections;

using System.IO;

using System.Security.AccessControl;

static class Tester

{

    public static void Main()

    {

        try

        {

            string filename = @"f:\k"; //目标目录

            string account = @"Administrator";//用户名

            string userrights = @"RW";//权限字符串,自己定义的

            AddDirectorySecurity(filename, account, userrights);

            Console.ReadLine();

        }

        catch (Exception e)

        {

            Console.WriteLine(e);

            Console.ReadLine();

        }

    }

    static public void AddDirectorySecurity(string FileName, string Account, string UserRights)

    {

        FileSystemRights Rights = new FileSystemRights();

        if (UserRights.IndexOf("R") >= 0)

        {

            Rights = Rights | FileSystemRights.Read;

        }

        if (UserRights.IndexOf("C") >= 0)

        {

            Rights = Rights | FileSystemRights.ChangePermissions;

        }

        if (UserRights.IndexOf("F") >= 0)

        {

            Rights = Rights | FileSystemRights.FullControl;

        }

        if (UserRights.IndexOf("W") >= 0)

        {

            Rights = Rights | FileSystemRights.Write;

        }

        bool ok;

        DirectoryInfo dInfo = new DirectoryInfo(FileName);

        DirectorySecurity dSecurity = dInfo.GetAccessControl();

        InheritanceFlags iFlags = new InheritanceFlags();

        iFlags = InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit;

        FileSystemAccessRule AccessRule2 = new FileSystemAccessRule(Account, Rights, iFlags, PropagationFlags.None, AccessControlType.Allow);

        dSecurity.ModifyAccessRule(AccessControlModification.Add, AccessRule2, out ok);

        dInfo.SetAccessControl(dSecurity);

        //列出目标目录所具有的权限

        DirectorySecurity sec = Directory.GetAccessControl(FileName, AccessControlSections.All);

        foreach (FileSystemAccessRule rule in sec.GetAccessRules(true, true, typeof(System.Security.Principal.NTAccount)))

        {

            Console.WriteLine("----------------------------------");

            Console.WriteLine(rule.IdentityReference.Value);

            if ((rule.FileSystemRights & FileSystemRights.Read) != 0)

                Console.WriteLine(rule.FileSystemRights.ToString());

        }

        Console.Read();

    }

}

对照MSDN,很容易看懂上面的代码。 但是貌似这个程序需要以管理员身份来运行。^_^

其中的Directory.GetAccessControl(FileName, AccessControlSections.All);  第二个参数如果为AccessControlSections.Access ,就可以使得运行在IIS中的Web应用程序获得目录权限了。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: