在 SimpleMembership 中,数据库中没有任何列可供用户被锁定/解锁。我基本上需要我的管理员启用或禁用我的应用程序中的任何用户。有没有其他选择?
5 回答
可能不是“批准”的做事方式,但这就是我的做法。
pages_Membership表中有一个名为IsConfirmed的字段。通常,这适用于您需要两阶段注册过程:注册然后通过电子邮件中的链接激活。但从本质上讲,该字段与之前aspnet_Membership表中的IsApproved具有相同的影响:如果设置为 true,则用户可以登录;如果设置为 true,则用户可以登录;如果是假的,他们不能。所以我只是使用普通的旧 SQL 设置为 true 或 false:
// If using EntityFramework
// 1. Setup my params
var params = new List<SqlParameter>() {
new SqlParameter("@UserID", 1),
new SqlParameter("@Activate", true) // or false
};
SqlParameter[] paramArray = params.ToArray();
// 2. Update the database
myDbContext.Database.ExecuteSqlCommand("UPDATE webpages_Membership SET IsConfirmed = @Activate WHERE UserId = @UserID", paramArray);
我还没有尝试过 simplemembership,但这对于我正在从事的一些小项目来说听起来很棒。以下是一些选项:
选项 1:向表中添加自定义字段,如下所示 - http://www.dwdmbi.com/2012/10/adding-custom-fields-to-vs2012-mvc4.html
选项 2使用返回给用户的外键创建一个新表。对此值进行额外检查。
无论哪种方式,您都需要额外的检查。您可以自定义“授权”属性以包括您的检查(此处的说明 -覆盖 ASP.NET MVC 中的授权属性)。
试试这个方法。它使用 IsApproved 而不是 IsLockedOut。如果您的实现尚未使用 IsAproved,这将是一个很好的解决方案。
MembershipUser user = Membership.GetUser(username);
user.IsApproved = false;
Membership.UpdateUser(user);
这并不完全锁定用户。从技术上讲,此呼叫正在从用户那里获得批准状态,并使他们无法登录。
我不知道您正在使用的技术,但是您必须按照指定的方式在表中提供具有锁定解锁功能的列,或者在数据库中添加一个表(例如 tlbDisable),您可以在其中删除原始表中的条目并将其插入新表表(tlbDisable)。
当您再次想要启用该用户时,只需从 tlbDisable 中删除该条目并将其插入原始用户表中。