Можете ли вы настроить членство .Net для использования файла config / xml в качестве источника данных - PullRequest
2 голосов
/ 18 декабря 2009

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

Можно ли хранить информацию о роли / пользователе / ​​членстве в файле web.config или в другом XML-файле вместо использования базы данных SqlServer?

Ответы [ 3 ]

2 голосов
/ 18 декабря 2009

Конечно, вам просто нужно свернуть свои собственные MembershipProvider и RoleProvider, который читает файл XML вместо базы данных. MembershipProvider и RoleProvider имеют множество свойств и функций, которые должны быть переопределены, но на самом деле для их функциональности необходимо лишь несколько из них - я оставил множество функций для добавления новых пользователей и т. Д., Выбрасывая неподдерживаемое исключение, потому что Я редактирую информацию пользователя прямо в базе данных.

1 голос
/ 31 декабря 2009

pjabbott дал правильный ответ на этот вопрос, но я решил показать код, который придумал, чтобы дать более полный ответ. Это примерно так просто, как вы могли бы сделать это, кстати.

Я создал класс, который наследуется от System.Web.Security.MembershipProvider , как показано ниже.

namespace MySolution
{
public class MembershipProvider : System.Web.Security.MembershipProvider
{

    public override string ApplicationName
    {
        get
        {
            return "PopupGallery";
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public override bool ChangePassword(string username, string oldPassword, string newPassword)
    {
        throw new NotImplementedException();
    }

    public override bool ChangePasswordQuestionAndAnswer(string username, string password, string newPasswordQuestion, string newPasswordAnswer)
    {
        throw new NotImplementedException();
    }

    public override MembershipUser CreateUser(string username, string password, string email, string passwordQuestion, string passwordAnswer, bool isApproved, object providerUserKey, out MembershipCreateStatus status)
    {
        throw new NotImplementedException();
    }

    public override bool DeleteUser(string username, bool deleteAllRelatedData)
    {
        throw new NotImplementedException();
    }

    public override bool EnablePasswordReset
    {
        get { return false; }
    }

    public override bool EnablePasswordRetrieval
    {
        get { return false; }
    }

    public override MembershipUserCollection FindUsersByEmail(string emailToMatch, int pageIndex, int pageSize, out int totalRecords)
    {
        throw new NotImplementedException();
    }

    public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
    {
        throw new NotImplementedException();
    }

    public override MembershipUserCollection GetAllUsers(int pageIndex, int pageSize, out int totalRecords)
    {
        throw new NotImplementedException();
    }

    public override int GetNumberOfUsersOnline()
    {
        throw new NotImplementedException();
    }

    public override string GetPassword(string username, string answer)
    {
        throw new NotImplementedException();
    }

    public override MembershipUser GetUser(string username, bool userIsOnline)
    {
        throw new NotImplementedException();
    }

    public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
    {
        throw new NotImplementedException();
    }

    public override string GetUserNameByEmail(string email)
    {
        throw new NotImplementedException();
    }

    public override int MaxInvalidPasswordAttempts
    {
        get { return 20; }
    }

    public override int MinRequiredNonAlphanumericCharacters
    {
        get { return 0; }
    }

    public override int MinRequiredPasswordLength
    {
        get { return 6; }
    }

    public override int PasswordAttemptWindow
    {
        get { throw new NotImplementedException(); }
    }

    public override MembershipPasswordFormat PasswordFormat
    {
        get { throw new NotImplementedException(); }
    }

    public override string PasswordStrengthRegularExpression
    {
        get { throw new NotImplementedException(); }
    }

    public override bool RequiresQuestionAndAnswer
    {
        get { throw new NotImplementedException(); }
    }

    public override bool RequiresUniqueEmail
    {
        get { throw new NotImplementedException(); }
    }

    public override string ResetPassword(string username, string answer)
    {
        throw new NotImplementedException();
    }

    public override bool UnlockUser(string userName)
    {
        throw new NotImplementedException();
    }

    public override void UpdateUser(MembershipUser user)
    {
        throw new NotImplementedException();
    }

    public override bool ValidateUser(string username, string password)
    {
        if (username == ConfigurationManager.AppSettings["Username"] && 
            password == ConfigurationManager.AppSettings["Password"])
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}
}

Затем я добавил следующие записи в мой web.config файл, чтобы соединить все это.

<appSettings>
  <add key="Username" value="admin"/>
  <add key="Password" value="password"/>
</appSettings>

<system.web>
  <membership defaultProvider="CustomMembershipProvider" 
            userIsOnlineTimeWindow="30">
    <providers>
      <remove name="AspNetSqlProvider" />
      <add name="CustomMembershipProvider"
        type="MySolution.MembershipProvider"
        enablePasswordRetrieval="false"
        enablePasswordReset="false"
        requiresQuestionAndAnswer="false"
        passwordFormat="Hashed"
        applicationName="/" />
    </providers>
  </membership>

  <authentication mode="Forms"/>
</system.web>
0 голосов
/ 18 декабря 2009

Да, вы можете реализовать свой собственный провайдер Memebrship и Role для аутентификации / авторизации в любом хранилище данных.

http://msdn.microsoft.com/en-us/library/f1kyba5e.aspx

...