【问题标题】:Blocking access to application for a user阻止用户访问应用程序
【发布时间】:2010-12-09 02:12:05
【问题描述】:

我有一个使用默认 ASP.NET Membership Provider 的 ASP.NET MVC 应用程序。

我的客户要求实施一项阻止用户登录的功能(例如对于辞职和离开公司的用户)。

我不能使用 Membership 表的 IsApproved 标志,因为该字段用于确认用户注册。

是否有任何内置功能可以做到这一点?您在这种情况下有什么经验?

【问题讨论】:

  • 您是否在使用帐户锁定?
  • @adrift:不可以。我可以使用它们来满足我的要求吗?
  • 是的,如果 IsLockedOut 为真,用户将无法登录,直到锁定被清除。
  • @adrift:你知道锁定/解锁用户的 API 吗?有参考吗?
  • 我认为你不能直接通过 Membership API 设置IsLockedOut 标志;您必须编写自己的代码/存储过程来设置它。可以使用MembershipUser 上的UnlockUser 方法清除它。

标签: asp.net asp.net-mvc asp.net-mvc-2


【解决方案1】:

由于您没有使用帐户锁定,您可以为此使用IsLockedOut 标志。如果IsLockedOuttrue,用户将无法登录,直到它被清除。

有关此属性通常如何使用的更多信息,请参阅MembershipUser.IsLockedOut

如果您想避免为此使用IsLockedOut,并假设您使用的是SqlMembershipProvider,另一种选择是直接修改提供程序在登录过程中调用的过程:aspnet_Membership_GetPasswordWithFormat

如果您检查该过程的代码,您会看到如果用户不存在或被锁定,它会返回一个非零结果:

IF (@UserId IS NULL)
    RETURN 1

IF (@IsLockedOut = 1)
    RETURN 99

您可以在单独的表格中维护被阻止用户的列表并在此处进行检查。不利的一面是,如果重新创建此过程或将站点切换到新的会员数据库,这些更改可能会丢失。

在这两个选项之间,我会选择使用IsLockedOut,但我想我会添加另一个选项,以防强烈反对以这种方式使用它。

HTH

【讨论】:

  • 你是绝对正确的。我认为最好的选择是在我的服务层中编写一个LockUser 方法,该方法会明确地尝试导致备注部分here 中描述的场景之一。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-12
  • 2017-10-16
  • 2018-08-21
相关资源
最近更新 更多