Расширение членства в Active Directory - PullRequest
2 голосов
/ 22 октября 2011

У меня есть веб-сайт ASP.NET, который будет использовать Active Directory для хранения пользователей.Существует требование разрешить пользователям использовать свои электронные письма в качестве имени пользователя.Active Directory не допускает символы, такие как «@» в именах пользователей.Я создал класс для расширения ActiveDirectoryMembershipProvider;Он преобразует имена пользователей из (user@domain.com в user_x0040_domain.com) перед вызовом функций базового класса.пример:

  public override bool ValidateUser(string username, string password)
        {
            string encodedUsername = this.Encode(username);
            return base.ValidateUser(encodedUsername, password);
        }

Проблема в том, что в MembershipUser не разрешается изменять имя пользователя.Как я могу обработать переопределение методов, которые возвращают MembershipUser?Like MembershipUser GetUser (строка username, bool userIsOnline)

1 Ответ

1 голос
/ 13 ноября 2011

Полагаю, вы могли бы сделать это, переопределяя членство MembershipUser, возвращаемое поставщиком Active Directory, что-то вроде этого:

public class MyActiveDirectoryMembershipProvider : ActiveDirectoryMembershipProvider
{
    public override MembershipUser GetUser(object providerUserKey, bool userIsOnline)
    {
        ActiveDirectoryMembershipUser user = (ActiveDirectoryMembershipUser)base.GetUser(providerUserKey, userIsOnline);
        if (user == null)
            return null;

        return new MyActiveDirectoryMembershipUser(user);
    }

    public override MembershipUserCollection FindUsersByName(string usernameToMatch, int pageIndex, int pageSize, out int totalRecords)
    {
        MembershipUserCollection newColl = new MembershipUserCollection();
        foreach (ActiveDirectoryMembershipUser user in base.FindUsersByName(usernameToMatch, pageIndex, pageSize, out totalRecords))
        {
            newColl.Add(new MyActiveDirectoryMembershipUser(user));
        }
        return newColl;
    }

    // TODO: check other methods to override
}

public class MyActiveDirectoryMembershipUser : ActiveDirectoryMembershipUser
{
    private string _userName;

    public override string UserName
    {
        get
        {
            return _userName;
        }
    }

    public MyActiveDirectoryMembershipUser(ActiveDirectoryMembershipUser user)
    {
        // TODO: do your decoding stuff here
        _userName = MyDecode(user.Email);
    }
}

ПРИМЕЧАНИЕ: вам нужно будет убедиться, что все методы, возвращающие пользователя, переопределены.Это также оказывает некоторое влияние на производительность методов сбора, потому что вам нужно будет дублировать коллекцию (как я показал в примере).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...