Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extending the .NET MembershipUser with own properties

I've written a custom MembershipProvider that works really great except one little thing, I'd like to extend the MembershipUser class a bit.

The default looks like this:

MembershipUser member = new MembershipUser(
    providerName: Membership.Provider.Name,
    name: db.userName,
    providerUserKey: null,
    email: db.userEmail,
    passwordQuestion: "",
    comment: "",
    isApproved: true,
    isLockedOut: false,
    creationDate: db.creationDate,
    lastLoginDate: db.lastLoginDate,
    lastActivityDate: db.lastActivityDate,
    lastPasswordChangedDate: DateTime.Now,
    lastLockoutDate: DateTime.Now
    );

But I'd like to extend it a bit, something like this:

MembershipUser member = new MembershipUser(
    providerName: Membership.Provider.Name,
    name: db.userName,
    guid: db.userGuid,
    company: db.companyName,
    companyGuid: db.companyGuid,
    whatever: db.whatever,
    providerUserKey: null,
    email: db.userEmail,
    passwordQuestion: "",
    comment: "",
    isApproved: true,
    isLockedOut: false,
    creationDate: db.creationDate,
    lastLoginDate: db.lastLoginDate,
    lastActivityDate: db.lastActivityDate,
    lastPasswordChangedDate: DateTime.Now,
    lastLockoutDate: DateTime.Now
    );

Is there a way to extend the default class?

like image 591
Eric Herlitz Avatar asked Apr 29 '11 14:04

Eric Herlitz


3 Answers

Of course!

Just create a class that extends MembershipUser:

public class CustomUser : MembershipUser
{
    // your custom properties/methods go here
}

In your CustomMembershipProvider you can return your CustomUser object. You just have to cast in the client application to CustomUser. Like so:

var myUserObject = Membership.GetUser() as CustomUser;
like image 97
nWorx Avatar answered Nov 17 '22 12:11

nWorx


MembershipUser isn't a sealed class, so you can just create a new class that inherits from it. Keep the existing functionality and only add the extra stuff you need.

If you do extend it, you'll either have to write your own membership provider that returns your new class, or convert from one to the other after each call into the default providers.

like image 36
Kevin Babcock Avatar answered Nov 17 '22 11:11

Kevin Babcock


  • Create your own provider, inherit from System.Web.Security.MembershipProvider
  • Create your own membership info, inherit from System.Web.Security.MembershipUser
  • Return your class from CreateUser(), GetUser(), etc
like image 2
abatishchev Avatar answered Nov 17 '22 13:11

abatishchev