Пользовательский MembershipProvider без MembershipUser

Можно ли создать собственный MembershipProvider без использования класса MembershipUser?

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


person Johan Alkstål    schedule 01.09.2011    source источник


Ответы (4)


Нет, это не так. Но вы всегда можете написать свою собственную абстракцию поверх нее, используя шаблон Repository или аналогичный, а затем использовать свою собственную User модель в приложении.

public UserRepository : IUserRepository
{
   private MembershipProvider provider;
   private UserAdapter userAdapter;

   public UserService(MembershipProvider provider, UserAdapter userAdapter)
   {
       this.provider = provider;
       this.userAdapter = userAdapter;
   }

   public MyUser GetUser(string email)
   {
       MembershipUser user = provider.GetUser(username, false);
       MyUser myUser= userAdapter.Map(user);
       return myUser;
   }
}
person TheCodeKing    schedule 01.09.2011
comment
Спасибо за пример. Хотя я решил не использовать структуру членства ASP.NET, вы отвечаете на мой вопрос. Можно ли создать настраиваемый MembershipProvider без использования класса MembershipUser? - person Johan Alkstål; 02.09.2011
comment
@JohanVauhkonen Возник та же проблема, и я думаю, что самое простое решение - создать нашу собственную систему. Вы можете легко воспроизвести поведение поставщика членства, но это потребует некоторой работы. - person Rushino; 05.12.2011

Если вы действительно хотите встроить своего поставщика в инфраструктуру членства ASP.NET, вам следует.

Membership.Provider возвращает реферат MembershipProvider, также содержащий:

public abstract MembershipUser CreateUser(..);
public abstract MembershipUser GetUser(..);

и другие методы, возвращающие класс MembershipUser.

person abatishchev    schedule 01.09.2011
comment
Спасибо, и я уже знал о реализации абстрактного MembershipProvider. Мне было интересно узнать, можно ли опустить MembershipUser и использовать что-то еще вместе с инфраструктурой членства. Ясно, что это не так. - person Johan Alkstål; 02.09.2011

Вы можете создать собственного поставщика членства без использования / наследования от пользователя членства в зависимости от вашего использования. Если вы не используете встроенный метод createuser (пользователь создается в другой исходной системе), то вам действительно не нужен объект пользователя членства. В противном случае просто создайте другой объект, унаследованный от memberuser с вашими дополнительными свойствами.

person Alex J    schedule 01.09.2011
comment
вы имеете в виду пользователя членства? Я говорил не наследовать пользователя членства, а не поставщика. Я понимаю, что мои формулировки могут немного сбивать с толку. Я имел в виду использовать настраиваемого поставщика членства, но на самом деле не использовать объект пользователя членства, если вам это не нужно. - person Alex J; 01.09.2011

это мое решение

customerUser.cs

public class DZMembership
{
    public virtual Guid Id { get; set; }
    public virtual string UserName { get; set; }
    public virtual string Password { get; set; }
    public virtual DateTime TimeCreated { get; set; }

}

customerProvider.cs

 public class DZMembershipProvider : MembershipProvider
{

    IDALMembership dal = DalFactory.GetDalMembership();
    #region override of membership provider
    public override string ApplicationName
    {
        get
        {
            throw new NotImplementedException();
        }
        set
        {
            throw new NotImplementedException();
        }
    }

    public override bool ChangePassword(string username, string oldPassword, string newPassword)
    {
        DZMembership member = dal.GetMemberByName(username);
        string encryptedOldPsw =  FormsAuthentication.HashPasswordForStoringInConfigFile(oldPassword, "MD5");
        string encryptedNewPsw = FormsAuthentication.HashPasswordForStoringInConfigFile(newPassword, "MD5");
        if (member.Password != encryptedOldPsw) return false;
        member.Password = encryptedNewPsw;
        dal.ChangePassword(member);
        return true;
    }
public override MembershipUser GetUser(string username, bool userIsOnline)
    {

        DZMembership user = dal.GetMemberByName(username);
        if (user == null) return null;
        MembershipUser mu = new MembershipUser("DZMembershipProvider",
             username, user.Id, "", "", string.Empty,
             true, true, DateTime.Now,
             DateTime.Now, DateTime.Now, DateTime.Now, DateTime.Now);
        return mu;

    }

когда методу требуется вернуть тип MembershipUser, создайте новый с информацией о пользователе вашего клиента. в большинстве случаев все будет хорошо. потому что встроенным элементам управления (логин, логинстатус.) больше не нужно. но я предлагаю настроить вашего собственного пользователя, унаследовав от MembershipUser, дополнительные свойства вас не укусят, но нехватка будет.

person phiree    schedule 28.05.2015