我正在ASP.NET MVC中编写一个拥有用户帐户的网站。由于该网站将面向讨论,我认为我需要一个管理员系统,以便能够在Stack Overflow上调节用户,就像我们在这里一样。我想能够将用户置于“暂停”,以便他们能够登录到该网站(此时他们会受到欢迎)一条消息,例如“您的帐户已被暂停直至[日期]”,但无法执行他们通常能够执行的用户的功能。
实施此方法的最佳方法是什么?
我正在考虑创建一个“暂停”角色,但问题是,我对普通用户本身有几个不同的角色,拥有不同的权限。
你以前设计过这样的功能吗?我该怎么办?提前谢谢。
答案 0 :(得分:3)
我认为角色是没有编写大量管道代码的方法。
创建一个名为 Active 的角色,默认情况下每个人都是其成员。然后在用户被暂停时将其从该角色中删除。
您要拒绝暂停用户的每个操作都需要 Active 角色。 Simples。
答案 1 :(得分:2)
我不知道你的对象模型是什么样的,但我认为任何用户都可以被暂停。
编辑:考虑到您需要在某处序列化数据,我想到了一个可能更简单的替代解决方案。也许您可以在“用户”对象上使用常规DateTime
,但为新用户初始化为DateTime.MinValue
。每当您将用户置于“暂停”状态时,请将suspendedUntil
设置为暂停用户的时间。
DateTime suspendedUntil = DateTime.MinValue;
每当您需要检查用户是否处于暂停状态时,只需将suspendedUntil
与DateTime.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。