MVC3 Блокировка пользователя членства

Я хочу, чтобы администраторы на моем сайте могли блокировать участников, но IsLockedOut() для членства в mvc по умолчанию доступен только для чтения. Я читал, что мне нужно создать настраиваемого поставщика членства, но я не совсем уверен, что это значит. Нужно ли мне создавать новую модель со свойством memberUser? Если возможно, я не хочу создавать новую таблицу в базе данных.

Вот код, который у меня есть для моего метода lockUser:

public static void LockUser(this MembershipUser user)
    {
        using (var db = new MovieContext())
        {
            Guid userid = (Guid)user.ProviderUserKey;
            MembershipUser member = Membership.GetUser(userid);
            member.IsLockedOut = true;
            member.LastLockoutDate = DateTime.Now;
            db.SaveChanges();
        }
    }

person Andrew    schedule 19.03.2013    source источник
comment
точно так же, как указал @SLaks, таблица aspnet_Membership имеет логические поля, называемые IsLockeOut. Установите это значение true.   -  person Dave Alperovich    schedule 19.03.2013
comment
Я пробовал это - только для чтения.   -  person Andrew    schedule 19.03.2013
comment
не объект членства. Поле базы данных.   -  person Dave Alperovich    schedule 19.03.2013
comment
Как получить прямой доступ к базе данных?   -  person Andrew    schedule 19.03.2013
comment
Я видел такой пример: var member = db.aspnet_Membership.Single(m => m.UserId == userid); но мой контекст не находит определения.   -  person Andrew    schedule 19.03.2013
comment
да, используя linq/EF, вы можете получить доступ к строке пользовательской таблицы. Если вы хотите лучше понять linq to entity, прочитайте об этом.   -  person Dave Alperovich    schedule 19.03.2013
comment
Спасибо. У меня есть другое окно, глядя на него.   -  person Andrew    schedule 19.03.2013


Ответы (1)


Андрей, попробуйте этот подход. Он использует IsApproved, а не IsLockedOut. Если ваша реализация еще не использует IsAproved, это будет хорошим решением.

MembershipUser muUser = Membership.GetUser(strUsernameToActOn);
muUser.IsApproved = false;
Membership.UpdateUser(muUser);

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

person Dave Alperovich    schedule 19.03.2013
comment
Это работает, и если дойдет до этого, я буду использовать этот способ, но я бы предпочел установить IsLockedOut = true, а также установить дату блокировки на текущее время. - person Andrew; 19.03.2013
comment
@ Андрей, для этого тебе придется пойти в БД. Я сделал это. Узнайте больше об EF и реализуйте собственный метод. - person Dave Alperovich; 19.03.2013
comment
Спасибо, я посмотрю еще немного. - person Andrew; 19.03.2013
comment
Если подумать, это лучше, чем блокировать пользователя. - person Andrew; 19.03.2013
comment
Давайте продолжим это обсуждение в чате. - person Dave Alperovich; 09.10.2014
comment
Отличное предложение, к сожалению, я использую члена IsAproved, чтобы узнать, одобрена ли учетная запись пользователя для использования. - person Zac; 09.10.2014