Member 13396929 Ответов: 1

Как разрешить пользователям добавлять файлы в пользовательские папки в ASP.NET веб-формы


Я создал Ан ASP.Net приложение веб-форм с использованием ASP.Net шаблон веб-форм по умолчанию. Я добавил страницу aspx под названием "Tool.aspx", где пользователь может добавлять файлы в назначенные им папки одним нажатием кнопки. Эта страница Tool.aspx может быть доступна только после того, как пользователь вошел в систему. Я назначил отдельные папки отдельным пользователям, добавив некоторый код на страницу Register.aspx по умолчанию.

Как сделать так, чтобы пользователь мог получить доступ только к назначенным ему папкам со страницы Tool.aspx?
Должен ли я передавать учетные данные пользователя из Login.aspx? Если да, то как?
Это код, который у меня есть в Register.aspx.cs :
protected void CreateUser_Click(object sender, EventArgs e)
{
    var manager = Context.GetOwinContext().GetUserManager<ApplicationUserManager>();
    var signInManager = Context.GetOwinContext().Get<ApplicationSignInManager>();
    var user = new ApplicationUser() { UserName = Email.Text, Email = Email.Text };
    IdentityResult result = manager.Create(user, Password.Text);
    if (result.Succeeded)
    {
        // For more information on how to enable account confirmation and password reset please visit https://go.microsoft.com/fwlink/?LinkID=320771
        //string code = manager.GenerateEmailConfirmationToken(user.Id);
        //string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
        //manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>.");

        signInManager.SignIn( user, isPersistent: false, rememberBrowser: false);
        IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
        userfilefolder = "~/" + user.UserName + "Files";
        if (!Directory.Exists(userfilefolder))
        {
            Directory.CreateDirectory(userfilefolder);
        }
        userimages = Path.Combine(userfilefolder, "/images");
        userpdfs = Path.Combine(userfilefolder, "/pdfs");
        Directory.CreateDirectory(userimages);
        Directory.CreateDirectory(userpdfs);
        AddDirectorySecurity(userfilefolder, Convert.ToString(result), FileSystemRights.ReadData, AccessControlType.Allow);
        AddDirectorySecurity(userimages, Convert.ToString(result), FileSystemRights.ReadData, AccessControlType.Allow);
        AddDirectorySecurity(userpdfs, Convert.ToString(result), FileSystemRights.ReadData, AccessControlType.Allow);

    }
    else
    {
        ErrorMessage.Text = result.Errors.FirstOrDefault();
    }
}
public static void AddDirectorySecurity(string FileName, string Account, FileSystemRights Rights, AccessControlType ControlType)
{
    // Create a new DirectoryInfo object.
    DirectoryInfo dInfo = new DirectoryInfo(FileName);

    // Get a DirectorySecurity object that represents the
    // current security settings.
    DirectorySecurity dSecurity = dInfo.GetAccessControl();

    // Add the FileSystemAccessRule to the security settings.
    dSecurity.AddAccessRule(new FileSystemAccessRule(Account,
                                                    Rights,
                                                    ControlType));

    // Set the new access settings.
    dInfo.SetAccessControl(dSecurity);

}


Что я уже пробовал:

Я пробовал использовать общие папки, но я не хочу, чтобы пользователи случайно связывались с файлами других пользователей.

MadMyche

Как только они войдут в систему и у вас будет их имя пользователя в сеансе, вы должны знать, где находятся все папки, так как вы создали имена папок

1 Ответов

Рейтинг:
10

Vincent Maverick Durano

Вы должны прочитать о ролевой авторизации WebForm: Авторизация На Основе Ролей (C#) | Microsoft Docs[^]

Дополнительный ресурс: Блог гуру Саркара - настройка правил авторизации для конкретной страницы или папки в web.config[^]