簡體   English   中英

如何修改Web設置項目中的文件夾權限?

[英]How to modify folder permissions in a web setup project?

我正在使用Web安裝項目來安裝我的ASP.NET應用程序,該應用程序需要寫入主虛擬目錄文件夾下的文件夾。 如何配置安裝項目以授予ASPNET用戶對該文件夾的權限?

這樣做的方法是創建一個派生自System.Configuration.Install.Installer的類。 重寫Install()方法。 以下是更改目錄和文件權限的示例,您可能不希望如此寬容,但這取決於您的安全上下文。 為了使其工作,安裝項目必須將其作為自定義操作運行。 從該類所在的任何項目中添加“主要輸出”。您還需要將該目錄傳遞給其屬性中的自定義操作。 第一個變量名必須與代碼匹配。 像這樣: /targetdir="[TARGETDIR]\\"

[RunInstaller(true)]
public partial class SetPermissions : Installer
{
    private const string STR_targetdir = "targetdir";
    private const string STR_aspnetUser = "ASPNET";

    public SetPermissions()
    {
        InitializeComponent();
    }

    public override void Install(IDictionary stateSaver)
    {
        base.Install(stateSaver);

        Context.LogMessage(
            Context.Parameters
                .Cast<DictionaryEntry>()
                .Select(entry => String.Format("String = {0} Value = {1}", entry.Key, entry.Value))
                .Aggregate(new StringBuilder("From install\n"), (accumulator, next) => accumulator.AppendLine(next))
                .ToString()
        );

        string targetDir = Context.Parameters[STR_targetdir];
        string dbDir = Path.Combine(targetDir, "db");

        AddFullControlPermissionToDir(dbDir, STR_aspnetUser);
        string rimdbSqliteFilename = Path.Combine(dbDir, "db.sqlite");
        AddFullControlPermissionToFile(rimdbSqliteFilename, STR_aspnetUser);
        string logsDir = Path.Combine(targetDir, "logs");
        AddFullControlPermissionToDir(logsDir, STR_aspnetUser);
    }

    private static void AddFullControlPermissionToDir(string dir, string user)
    {
        DirectorySecurity directorySecurity = Directory.GetAccessControl(dir);
        directorySecurity.AddAccessRule(
            new FileSystemAccessRule(
                user,
                FileSystemRights.FullControl,
                InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                PropagationFlags.None,
                AccessControlType.Allow));
        Directory.SetAccessControl(dir, directorySecurity);
    }

    private static void AddFullControlPermissionToFile(string filename, string user)
    {
        FileSecurity fileSecurity = File.GetAccessControl(filename);
        fileSecurity.AddAccessRule(
            new FileSystemAccessRule(
                user,
                FileSystemRights.FullControl,
                AccessControlType.Allow));
        File.SetAccessControl(filename, fileSecurity);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM