WCF文件存储库和安全性-保存文件时权限出错
我有一个文件存储库服务,在大多数情况下都可以使用。问题是,一旦我开始在方法中实现DirectorySecurity,我就遇到了问题。目录创建得很好,分配给目录的帐户被授予访问权限,但所有权限最终都在“特殊权限”下。然而,这不是问题所在。当我试图写一个新文件时,问题就出现了。我收到以下错误消息: System.ServiceModel.FaultException'1。。。访问路径。。。被拒绝。 正如我所说,创建目录结构是为了保存文件。但是,该文件无法进入文件夹。我确实看到了所有允许的用户,我可以将文件放在那里。不过,在windows中手动执行此操作时,我可以从目录中运行.exe文件,尽管我拒绝了AccessControls中的权限。下面是“Put”方法的示例,以及我用来构建DirectorySecurity对象的另一个方法 我的问题是:WCF文件存储库和安全性-保存文件时权限出错,wcf,security,tcp,access-rules,Wcf,Security,Tcp,Access Rules,我有一个文件存储库服务,在大多数情况下都可以使用。问题是,一旦我开始在方法中实现DirectorySecurity,我就遇到了问题。目录创建得很好,分配给目录的帐户被授予访问权限,但所有权限最终都在“特殊权限”下。然而,这不是问题所在。当我试图写一个新文件时,问题就出现了。我收到以下错误消息: System.ServiceModel.FaultException'1。。。访问路径。。。被拒绝。 正如我所说,创建目录结构是为了保存文件。但是,该文件无法进入文件夹。我确实看到了所有允许的用户,我可以
//----------------------------
//WCF Service - PutText Method
//----------------------------
//NOTE: dir = virtual directory
public bool PutTextFile(string dir, string fileName, string data)
{
string path;
string fExt;
DirectoryInfo d;
#region Null / value checks
//...
#endregion
//check & enforce file extension
fExt = Path.GetExtension(fileName).ToLower();
if (fExt != ".txt" && fExt != ".xml" && fExt != ".csv")
{
fileName = Path.GetFileNameWithoutExtension(fileName) + ".txt";
}
//check directory exists
d = new DirectoryInfo(Path.Combine(this._fileRepositoryRoot, dir));//_fileRepositoryRoot is taken from .config
if (!d.Exists)
{
try
{
DirectorySecurity ds = this.CreateDirSecurityObj(); //<-- See method below
d.Create(ds);
}
catch (Exception e)
{
//...
}
}
//complete path
path = Path.Combine(this._fileRepositoryRoot, dir, fileName);
try
{
using (StreamWriter sw = File.CreateText(path))
{
sw.Write(data);
}
return true;
}
catch (Exception e)
{
//...
}
}
//-------------------------
//Directory Security Method
//-------------------------
//NOTE:
//"private string _myDomain" and "private string _myUserAccount" are pulled from an app.config file
private DirectorySecurity CreateDirSecurityObj()
{
System.Security.AccessControl.DirectorySecurity ds = new System.Security.AccessControl.DirectorySecurity();
//define User rights
FileSystemRights grantUserRights = FileSystemRights.AppendData;
grantUserRights |= FileSystemRights.Synchronize;
grantUserRights |= FileSystemRights.CreateDirectories;
grantUserRights |= FileSystemRights.CreateFiles;
grantUserRights |= FileSystemRights.ListDirectory;
grantUserRights |= FileSystemRights.Read;
grantUserRights |= FileSystemRights.Write;
grantUserRights |= FileSystemRights.Delete;
FileSystemRights denyUserRights = FileSystemRights.ExecuteFile;
denyUserRights |= FileSystemRights.ChangePermissions;
//define access rule
FileSystemAccessRule grantRule_User = new FileSystemAccessRule(Path.Combine(this._myDomain, this._myUserAccount), grantUserRights, AccessControlType.Allow);
FileSystemAccessRule denyRule_User = new FileSystemAccessRule(Path.Combine(this._myDomain, this._myUserAccount), denyUserRights, AccessControlType.Deny);
//add access rule
ds.AddAccessRule(grantRule_User);
ds.AddAccessRule(denyRule_User);
ds.AddAccessRule(grantRule_Admin);
return ds;
}
//----------------------------
//WCF服务-PutText方法
//----------------------------
//注意:dir=虚拟目录
公共boolputtextfile(字符串目录、字符串文件名、字符串数据)
{
字符串路径;
字符串fExt;
目录信息d;
#区域空/值检查
//...
#端区
//检查并强制执行文件扩展名
fExt=Path.GetExtension(fileName.ToLower();
if(fExt!=“.txt”&&fExt!=“.xml”&&fExt!=“.csv”)
{
fileName=Path.GetFileNameWithoutExtension(fileName)+“.txt”;
}
//检查目录是否存在
d=新目录信息(Path.Combine(this.\u fileRepositoryRoot,dir));/\u fileRepositoryRoot取自.config
如果(!d.Exists)
{
尝试
{
DirectorySecurity ds=this.CreateDirSecurityObj()//