【问题标题】:ASP.NET MVC 4 Provide different privileges for users on different pagesASP.NET MVC 4 为不同页面的用户提供不同的权限
【发布时间】:2013-12-04 12:31:46
【问题描述】:

假设我有一个 ASP.NET MVC 4 应用程序。我需要为同一用户在不同页面上提供不同的权限。例如,同一用户可能是一个页面上的管理员和另一个页面上的访客。 MVC 默认提供系统范围的用户权限。 我挖掘了一些我应该使用自定义会员提供程序来实现我的目标的信息,但我还不确定这一点。 有人可以提出解决方案吗?

角色在相同类型的页面上的行为应该相同。假设论坛上的主题内容只能由创建它的人或版主编辑。然而,用户将无法编辑其他人的主题,并且主持人将无法编辑不属于他的主题主题组的主题。我的应用程序中的角色系统的行为应该类似。

【问题讨论】:

  • 您只需自己实现逻辑即可。假设在/foo/bar 操作中,您只需在逻辑上检查用户是否处于角色中并允许或拒绝该操作,然后在/foo/baz 中再次检查并允许或拒绝。但是,您应该注意,这会使事情复杂化。考虑拥有多个角色而不是单个角色,这在不同的控制器/动作中意味着不同的事情。
  • 我会说考虑使用多个角色。例如而不是管理员考虑使用 SectionAdministrator 和 OtherSectionGuest。
  • 您可以将 AuthorizeAttribute 放在控制器的操作上,并为用户提供应该有权访问特定操作的用户属性。

标签: asp.net-mvc asp.net-mvc-4 roles membership


【解决方案1】:

您不一定要创建自定义成员资格提供程序,但您必须以不同的方式考虑权限。

首先,将您脑海中的“角色”替换为“操作”

您需要在您的应用程序中创建原子的、细粒度的权限,例如:

  • 用户属性视图
  • UserPropertiesModify
  • 创建用户
  • 删除用户
  • 角色视图
  • 角色修改
  • 创建角色
  • 删除角色

一开始可能会很困难,但这让您可以很好地控制和灵活地将操作分配给各个用户。由于不同的页面会有不同的操作,您可以自定义它们的访问权限。

不幸的是,开箱即用的 ASP.Net 成员资格和角色提供者都脱离了课程粒度角色的概念。 只要您知道它们是操作,而不是角色,您就可以了。

抽象是你的朋友:

public static class Permissions
{
   public static bool Operation(string op)
   {
      //this class can be a lot better
      // it can be testable, and check
      // error conditions, but this is
      // only an example :)
      return HttpContext.Current.User.IsInRole(op);
   }
}

您可能希望将所有这些操作归为角色,但这需要您进行一些自定义编程。

自定义提供程序真的没有那么可怕,您可以轻松扩展内置的提供程序。

【讨论】:

  • 谢谢你,乔希。在我问这个问题之前,我实际上想到了这个解决方案......但是。我被特别要求不要实施这个解决方案,因为它“太灵活了”。 :) 然而,我相信这是迄今为止最好的解决方案。
猜你喜欢
  • 2011-08-20
  • 2010-09-29
  • 1970-01-01
  • 2012-07-22
  • 2013-10-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多