【问题标题】:Group Based Authorization in ASP.NET MVCASP.NET MVC 中基于组的授权
【发布时间】:2011-04-06 15:27:35
【问题描述】:

我有管理员、用户等站点角色,这很好。

但假设我有一个合法的申请(或任何类似的申请)。我有一个名为Case 的实体。现在,我可以有很多案例,但并非所有用户都应该有权访问任何特定案例。假设 Fred 和 Tom 应该有权访问 Case1,但只有 Gina 和 Rebecca 应该有权访问 Case2?

很简单,对吧?我们有案例,用户可以属于一个案例。这是第一部分。第二部分是如何拥有“案例角色”,因此 Fred 可以成为 Case1 的“管理员”并且能够进行重大更改,但也许 Tom 只是 Case1 的“用户”并且只能做一些小事并且具有只读权限访问等。

我知道我可能需要实现一个自定义属性等,但我在 Web 上找不到这种特殊事物的任何示例。但我想这在大多数业务应用程序中一定很常见。 (如 Basecamp 或 Highrise 等)

更新让我举一个不同的例子:

将项目管理软件作为服务应用程序,例如 Basecamp。用户可以创建“项目”。然后该用户可以邀请其他用户加入她的“项目”。但是,创建用户可以为每个用户分配不同的权限到她的项目。基本问题是如何在 ASP.NET MVC 中做这种事情。

【问题讨论】:

  • 我只会为这些能力中的每一个创建角色。创建一个可以更新案例 1 的方法,并且只有管理员可以访问该方法。创建一个读取案例 1 的方法,并且只有用户/管理员可以访问该方法。至于 UI,您只需要创建多个 UI 元素并根据它们的角色显示和隐藏。
  • @Evan-Larsen,这如何解决基本问题?问题是用户可以创建案例。我无法对“Case1”或“Case2”进行硬编码。用户可能会创建“Case49”,然后希望将用户与其关联。另外,我不想只显示/隐藏案例的链接,因为如果用户尝试转到 /Case/1/Edit 或其他任何内容,并且不是该案例的正确用户级别,我不想允许它。
  • 顺便说一句,我会接受答案。 :) 到目前为止,我提出的所有问题都没有任何提交的答案!这不是一个非常基本的事情吗?似乎几乎所有的商业应用都需要支持这样的东西。

标签: asp.net-mvc asp.net-membership authorization custom-authentication


【解决方案1】:

我从您的问题中了解到,每个案例都是一个实体(数据库中的一行),并且您希望将不同案例(实体)分配给不同角色的不同访问权限。在这种情况下,您可以拥有一个超级管理员角色,将案例的访问权限分配给其他角色。基于此信息,您可以编写自定义 atuhorize 属性并获取超级管理员授予当前登录用户/角色从数据库中的权限,并根据此标准做出决定。此外,创建案例的访问权限是通用的,因为在创建之前它不存在,因此任何有权创建案例的人都可以创建任何案例(无论是 case1 还是 case49)。创建案例后,该案例的权限也可以由案例的创建者设置。

【讨论】:

  • 我想这就是我所说的。所以我想我的问题是,就自定义属性而言,这是什么样的?这似乎很简单。以像 Basecamp 这样的项目管理软件即服务应用程序为例。用户可以创建“项目”。然后该用户可以邀请其他用户加入她的“项目”。但是,创建用户可以为每个用户分配不同的权限到她的项目。基本问题是如何在 ASP.NET MVC 中做这种事情。
  • 您必须创建一个用于权限管理的小模块,您可以在其中定义文档的不同权限(创建、编辑、删除)。创建案例后,您可以要求创建者将这些权限分配给其他角色/用户。为此,您必须有单独的 UI 列出表或网格中的所有角色,并在它们前面使用“允许编辑”和“允许”删除“按钮。按下此按钮后,您可以将该信息保存在数据库表中。一旦完成您只需要在授权属性中查阅相应的表格
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 2014-03-15
  • 2012-05-14
  • 1970-01-01
  • 2012-05-07
相关资源
最近更新 更多