如何实现基于信誉的用户权限,如SO?

时间:2011-06-28 08:56:16

标签: asp.net-mvc asp.net-mvc-3 user-permissions

您可能认为这个问题应该在Meta SO上,但它不应该,因为它基本上是关于ASP.Net MVC,但我想要实现的技术已经在SO中实现。

我希望用户在获得更多声誉的同时拥有权力,就像我们在StackOverflow中所做的那样,我的问题是如何设计用户身份验证系统?我们可以依赖内置的Forms身份验证吗?以及如何管理为用户显示的链接(取决于信誉)和不显示的内容?

我认为我们不能在这里使用角色,所以我们最终不会有1000个角色,对吧?但我们可能只使用2个角色(管理员,用户)。

[编辑]:
我认为最好创建我自己的Users表而不是依赖于Forms身份验证,因此我可以将声誉字段(和其他字段)添加到users表并跟踪它,就像你说的那样。 BTW @MartinHN,我知道你所谈到的if,但我的问题是有更聪明的方法来处理这些问题吗?

2 个答案:

答案 0 :(得分:5)

您可以创建一个简单的规则系统。每个用户都有与之关联的信誉评分。然后,使用action filter,您可以控制对系统中函数的访问:

public class SomeController : IController
{
    ...
    [ReputationNeeded(Reputations.CanVoteDown)] // your custom action filter
    [HttpPost]
    public ActionResult VoteDown(...)
    { /* */ }
}
祝你好运!

答案 1 :(得分:3)

管理用户的声誉,以及他/她可以访问的内容(通过声誉衡量),不应该是身份验证机制本身的一部分,恕我直言。

在网络上,您主要使用表单身份验证,一旦通过身份验证,您可以将声誉应用于用户,并在用户没有足够声誉的情况下关闭区域。

我不会将此功能作为身份验证系统的一部分。我只是让用户进行身份验证,然后为任何给定的用户呈现适当的视图。

假设您的主导航根据声誉而变化。您需要包含需要超过1000个代表的导航栏的项目。使用if语句,如果用户少于1000,则不显示。