ASP.NET MVC 4为不同页面上的用户提供不同的权限

时间:2013-11-20 13:25:26

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

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

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

1 个答案:

答案 0 :(得分:0)

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

首先,将“角色”替换为“操作”

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

  • UserPropertiesView
  • UserPropertiesModify
  • CREATEUSER
  • DeleteUser
  • RolesView
  • RolesModify
  • CREATEROLE
  • DeleteRole

一开始可能很难,但这使您在为个人用户分配操作方面具有很强的控制力和灵活性。由于不同的页面将有不同的操作,您将能够自定义其访问权限。

不幸的是,开箱即用的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);
   }
}

在某个地方,您需要将所有这些操作分组到角色中,但这需要您进行一些自定义编程。

自定义提供商确实不那么可怕,您可以轻松扩展内置提供商。