【问题标题】:How to implement a Reputation-based User Permissions Like SO?如何实现像 SO 这样的基于信誉的用户权限?
【发布时间】:2011-09-24 03:26:38
【问题描述】:

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

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

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

[编辑]:
我认为创建自己的用户表而不是依赖于表单身份验证更好,因此我可以将信誉字段(和其他字段)添加到用户表并像你说的那样跟踪它。顺便说一句@MartinHN,我知道你谈到的if,但我的问题是有没有更聪明的方法来处理这些事情?

【问题讨论】:

  • 我想 SO 在内部处理“信誉权限”,每个普通用户都只是一个“用户”,但我从未见过来源,所以这是一个 WAG。
  • 您是否混淆了“身份验证”和“授权”? StackExchange 使用 OpenID 进行身份验证,这并不能确定您拥有的权限。
  • 不,我不是,只是我想找到一个既能负担得起,又能方便维护/未来扩展的系统。

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


【解决方案1】:

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

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

祝你好运!

【讨论】:

  • +1 非常感谢,这是我想要的很酷的东西的一部分。
  • 请教另一个问题,如何在操作过滤器类中访问用户对象(然后是信誉)?我的意思是这不是上下文的一部分,如何解决这个问题?
  • 我猜有很多方法。一个在这里讨论:stackoverflow.com/questions/5758611/…
  • 我浏览了它,看到了很多 Ninject 的东西,总有一天它们看起来很有希望 :)
【解决方案2】:

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

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

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

说你的主要导航会根据声誉而改变。您包装需要超过 1000 次代表的导航栏项目。 if 声明,如果用户少于 1000,则不要显示。

【讨论】:

    猜你喜欢
    • 2011-08-25
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 1970-01-01
    • 2019-09-09
    • 1970-01-01
    相关资源
    最近更新 更多