在ASP.NET MVC中为用户实现暂停或惩罚系统

时间:2010-04-17 05:00:03

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

我正在ASP.NET MVC中编写一个拥有用户帐户的网站。由于该网站将面向讨论,我认为我需要一个管理员系统,以便能够在Stack Overflow上调节用户,就像我们在这里一样。我想能够将用户置于“暂停”,以便他们能够登录到该网站(此时他们会受到欢迎)一条消息,例如“您的帐户已被暂停直至[日期]”,但无法执行他们通常能够执行的用户的功能。

实施此方法的最佳方法是什么?

我正在考虑创建一个“暂停”角色,但问题是,我对普通用户本身有几个不同的角色,拥有不同的权限。

你以前设计过这样的功能吗?我该怎么办?提前谢谢。

3 个答案:

答案 0 :(得分:3)

我认为角色是没有编写大量管道代码的方法。

创建一个名为 Active 的角色,默认情况下每个人都是其成员。然后在用户被暂停时将其从该角色中删除。

您要拒绝暂停用户的每个操作都需要 Active 角色。 Simples。

答案 1 :(得分:2)

我不知道你的对象模型是什么样的,但我认为任何用户都可以被暂停。

编辑:考虑到您需要在某处序列化数据,我想到了一个可能更简单的替代解决方案。也许您可以在“用户”对象上使用常规DateTime,但为新用户初始化为DateTime.MinValue。每当您将用户置于“暂停”状态时,请将suspendedUntil设置为暂停用户的时间。

DateTime suspendedUntil = DateTime.MinValue;

每当您需要检查用户是否处于暂停状态时,只需将suspendedUntilDateTime.Now进行比较即可。如果suspendedUntil位于DateTime.Now之后,则您知道用户被暂停直到指定的日期和时间。否则,用户不会被暂停。用户退出暂停后,无需修改suspendedUntil,因为它将在DateTime.Now之后。

bool userIsSuspended = suspendedUntil > DateTime.Now;

序列化DateTime将使用suspendedUntil.ToBinary()保存DateTime.FromBinary(long)的价值并“重新水化”它。

答案 2 :(得分:2)

让我将评论转换为答案并强奸Zach和James的答案,提供我认为可行的解决方案而无需进入'自定义提供商区'。虽然编写自定义提供程序并不是非常复杂,但根据我的经验,如果您可以让内置提供程序执行您想要的操作,即使它需要在这里或那里闻到,也始终是最好的路径。

添加一个角色,比如WellGroomedAndBehavesSelf,可以控制对用户应该有权访问的内容和行为的访问权限。

在您的web.config中实施配置文件并添加ReinstateDate属性(或UngroundedOnDate ;-D)。

当用户行为不当时,请从角色WellGroomedAndBehavesSelf中删除它们并设置ReinstateDate个人资料属性。

在您的登录逻辑中,覆盖OnAuthenticate并检查ReinstateDate个人资料属性,如果存在并通过,请将其清除并将用户添加到角色WellGroomedAndBehavesSelf

完成,无需自定义提供商。

<强>更新 另一种方法,可能更强大,可防止用户永远停止,如果在某种程度上将配置文件清除到登录逻辑以外的其他位置,则检查角色WellGroomedAndBehavesSelf,如果缺少,则检查ReinstateDate的配置文件。如果已经过了或不存在,请将用户放回WellGroomedAndBehavesSelf

同样的效果,但逻辑上的细微变化将提供更强大的解决方案。

如何实施个人资料:

如果您使用的是网站网站项目,请here

如果您使用的是Web 应用程序项目,请查看here