找不到目录使用DirectorySecurity库尝试获取访问规则时

时间:2016-09-15 14:18:48

标签: c# authentication active-directory

我正在尝试使用获取访问规则的方法为用户获取特定文件夹写入权限,并检查登录用户是否具有该文件夹的写入权限。但是当我尝试这样做时,我收到一条错误,指出directorynotfound。 以下是错误的屏幕截图:

enter image description here

她是我正在使用的方法:

private bool AccessPlanTemplate()
        {
            bool result = false;

            try
            {
                string PlanTemplate = System.Configuration.ConfigurationSettings.AppSettings["PlanTemplate"];

                string path = @"PlanTemplate";
                string NtAccountName = @"TestUser";

                DirectoryInfo di = new DirectoryInfo(path);
                DirectorySecurity acl = di.GetAccessControl(AccessControlSections.All);  //I AM GETTING ERROR ON THIS LINE
                System.Security.AccessControl.AuthorizationRuleCollection rules = acl.GetAccessRules(true, true, typeof(NTAccount));

                //Go through the rules returned from the DirectorySecurity
                foreach (System.Security.AccessControl.AuthorizationRule rule in rules)
                {
                    //If we find one that matches the identity we are looking for
                    if (rule.IdentityReference.Value.Equals(NtAccountName, StringComparison.CurrentCultureIgnoreCase))
                    {
                        //Cast to a FileSystemAccessRule to check for access rights
                        if ((((FileSystemAccessRule)rule).FileSystemRights & FileSystemRights.WriteData) > 0)
                        {
                            result = true;
                        }
                    }

                }
            }
            catch (UnauthorizedAccessException)
            {
                result = false;
            }
            return result;
        }

有人对我在哪里出错有任何建议吗?有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

您正在设置字符串路径= @“PlanTemplate”的字符串值的路径;当我认为你想将plantemplate的值分配给你的路径时。正如这个代码所代表的那样,当我想你想要像@“c:\ mydirectory”这样的东西时,它总会尝试评估一个名为“PlanTemplate”的目录。

变化:

 string path = @"PlanTemplate";

为:

 string path = PlanTemplate;

再试一次