如何在MVC SimpleMembership中锁定/解锁用户

时间:2012-11-06 06:38:32

标签: c# asp.net asp.net-mvc asp.net-mvc-4

在SimpleMembership中,数据库中没有用于锁定/解锁用户的列。 我基本上需要我的管理员来启用或禁用我的应用程序中的任何用户。 有没有其他选择?

5 个答案:

答案 0 :(得分:6)

我发现使用Roles执行此操作最简单。拥有ActiveUser角色并使用Authorize属性标记您的控制器或操作。

[Authorize(Roles = "ActiveUser")]

然后一些简单的管理员在角色中添加或删除用户以解锁并锁定他们对受该角色属性保护的所有内容的访问权。

Roles.AddUserToRole(user.Username, "ActiveUser");

Roles.RemoveUserFromRole(user.Username, "ActiveUser");

答案 1 :(得分:0)

我还没有尝试过简单的会员,但这对我正在进行的一些小项目来说非常好。以下是一些选项:

选项1 :向表格添加自定义字段,如下所示 - http://www.dwdmbi.com/2012/10/adding-custom-fields-to-vs2012-mvc4.html

选项2 使用外键创建一个新表回用户。请额外检查此值。

无论哪种方式,你都需要额外的支票。您可以自定义“授权”属性以包含您的支票(此处的说明 - Override Authorize Attribute in ASP.NET MVC)。

答案 2 :(得分:0)

可能不是"批准"做事的方式,但这就是我的做法。

webpages_Membership 表中有一个名为 IsConfirmed 的字段。通常,这适用于您需要2阶段注册过程的时间:注册然后通过电子邮件中的链接激活。但就本质而言,此字段与前 aspnet_Membership 表中的 IsApproved 具有相同的效果:如果设置为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);

答案 3 :(得分:0)

尝试这种方法。它使用IsApproved而不是IsLockedOut。如果您的实现尚未使用IsAproved,这将是一个很好的解决方案。

MembershipUser user = Membership.GetUser(username);
user.IsApproved = false;
Membership.UpdateUser(user);

这并不完全锁定用户。从技术上讲,此呼叫正在从用户处获得批准状态,并使他们无法登录。

答案 4 :(得分:-1)

我不知道您正在使用的技术,但是您必须在表中使用锁定解锁指定列,或者在数据库中添加一个表(Say tlbDisable),您可以在其中删除原始表中的条目并插入它在新表中(tlbDisable)。

当您再次想要启用该用户时,只需从tlbDisable中删除该条目并将其插入原始用户表。