限制asp.net mvc应用程序中的功能?

时间:2011-03-21 14:26:39

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

我想知道限制帐户功能的最佳方式是什么。

说我有免费帐户和高级帐户。如何限制只有高级帐户才能获得的功能?

现在我唯一能想到的就是视图中有很多“if语句”。

我需要限制的一些项目是。

  1. Jquery Ui Tabs(高级帐户有一个额外的jquery ui标签 - 免费有4个但高级有5个。)
  2. 所以现在这意味着我需要隐藏无序列表的if语句和包含它的div的一个语句。如果我使用ajax标签,也许就是一个。

    1. 超链接。我有一些超链接加载了jquery对话框,需要再次向免费用户隐藏,我唯一能想到的是if语句。
    2. 这些是我期待我需要隐藏免费帐户的东西。

      我认为在所有这些“if语句”的视图中看起来很讨厌但是我不想拥有多个视图(一个视图用于免费帐户,一个用于高级视图)因为这意味着我可能必须开始重复代码,(即使使用部分视图)也会变得更加混乱,因为现在我需要查看更多文件,创建更多操作结果并确定要使用哪些文件。

      在一个网站上,我为帐户和操作结果尝试了多个视图,但效果不佳。

      那么最好的方法是什么?

3 个答案:

答案 0 :(得分:2)

首先,您需要将此逻辑添加到控制器,而不是视图。您将向视图发送一些数据,向其发出信号,表明它应显示高级与标准功能。但是关于你是否应该在控制器中进行高级或标准状态的决定。

因此,您的观点可能包含if语句或某种逻辑来决定是否显示某些功能,但它们将基于您从控制器发送的“accountlevel”数据。

如果您在视图中添加“if”语句,或者在您的情况下添加许多语句,则应该考虑编写HTML帮助程序。这会大大清理你的代码。您可以在视图中使用HtmlHelper.JQueryTabs(),而不是编写多个if。在JQueryTabs方法中,您可以根据帐户级别输出适当的HTML / Javascript。

这是关于creating custom HTML helpers

的文章

答案 1 :(得分:1)

您可以使用包含两个集合的视图模型,一个用于链接,另一个用于制表符。控制器将根据用户的权限填充这些内容。在视图中,您可以迭代这些集合并相应地显示它们。

答案 2 :(得分:0)

我会通过在会员提供者下创建角色来解决这个问题。然后你可以按照以下方式装饰整个控制器或其中的动作:

[Authorize(Roles = "Premium")]
public virtual ActionResult ShowPremiumContent()
{
    return View();
}

网上有一些很好的资源可以为同一个游戏提供不同的方法:

Restrict Area to a given role

http://weblogs.asp.net/srkirkland/archive/2010/01/04/authorizing-access-via-attributes-in-asp-net-mvc-without-magic-strings.aspx

http://geekswithblogs.net/thomasthedeuce/archive/2009/06/25/133056.aspx