2011-06-28 25 views
5

你可能认为这个问题应该在Meta SO上,但它不应该,因为它基本上是关于ASP.Net MVC的,但是我想实现的技术已经在SO中实现了。如何实现基于声誉的用户权限像SO?

我希望用户在获得更多声誉的同时获得更多声誉,就像我们在StackOverflow中所做的一样,我的问题是如何设计用户认证系统?我们可以依靠内置的表单身份验证吗?以及如何管理要显示给用户的哪些链接(取决于声誉),哪些不是?

我想我们不能在这里使用角色,所以我们不会以1000个角色结束,对吧?但我们只能使用2个角色(管理员,用户)。

[编辑]:
我觉得这是更好地创建自己的用户表,而不是取决于窗体身份验证,所以我可以声誉场(和其他字段)添加到用户表和跟踪像你说的。顺便说一句@MartinHN,我知道你谈到的if,但是我的问题是有更聪明的办法来处理这些问题吗?

+0

我想象SO在内部处理“信誉权限”,每个普通用户只是一个“用户”,但我从来没有见过源,所以这是一个WAG。 – 2011-06-28 09:03:41

+0

你难以理解“认证”和“授权”吗? StackExchange使用OpenID进行身份验证,但不确定您拥有的权限。 –

+0

不,我不是,这只是我想找到一个系统,既便于维护/未来扩展。 –

回答

5

您可以创建一个简单的规则系统。每个用户都有一个与他们相关的信誉分数。然后,使用一个action filter,你可以控制访问功能,在您的系统:

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

祝你好运!

+0

+1非常感谢,这是我想要的很酷的东西的一部分。 –

+0

请问另一个问题,如何在动作过滤器类中访问用户对象(以及声誉)?我的意思是这不是上下文的一部分,如何解决这个问题? –

+1

我猜有很多种方法。一个在这里讨论:http://stackoverflow.com/questions/5758611/mvc3-action-filter-using-database-ef-4-1-dbcontext-ninject。 –

3

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

在Web上,您主要使用Forms身份验证,一旦通过身份验证,您就可以将声誉应用于用户,并在用户信誉不足时关闭区域。

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

说你的主导航根据声望而改变。您可以包装需要超过1000个代表的导航栏的项目。与if声明,并不显示它,如果用户少于1000.

+0

+1内容丰富。 –

相关问题