【问题标题】:Role base access on UI controls in ASP.NET MVC对 ASP.NET MVC 中 UI 控件的基于角色的访问
【发布时间】:2018-05-28 22:47:12
【问题描述】:

我正在构建一个应用程序,其中不同角色的多个用户可以访问同一页面,例如

  • 管理员可以更新所有字段
  • Initiator可以在页面的所有控件中插入数据,除了cmets框
  • 审阅者只能在 cmets 框中插入数据
  • 指南只能读取屏幕上的数据,无法更新屏幕上的任何内容

到目前为止,我唯一想到的是我应该制作自定义 Html 帮助程序,我将在其中接受角色作为参数并检查角色并相应地向控件添加禁用或启用类。 应用程序将有数百个页面,但某些页面可能对不同角色具有不同的访问权限。请提供一个解决方案,让我可以在不影响性能的情况下实现此特定页面和基于角色的访问控制。

任何帮助或建议将不胜感激。谢谢。

【问题讨论】:

  • 你试过看看the docs吗?
  • (这可能与核心和 MVC 略有不同,但应该适用一般原则,添加自定义助手可以弥补差距)
  • @Clint 感谢您提供宝贵的意见,但如果我使用它,我需要为每个控件使用@if ((await AuthorizationService.AuthorizeAsync(User, Model, Operations.Edit)).Succeeded),正如我所提到的,我需要在 100 多页中做这样的事情,我没有在每个控件上编写此代码的通用解决方案会更好。
  • 鉴于您的权限不像每个控件那样细粒度,您肯定可以每页测试一次,并将结果作为模型的一部分吗?或者至少作为页面上声明的变量?这样你就可以对变量进行测试。无论如何都很麻烦,我知道,但我不相信有一种简单的方法可以将这些规则应用于所有控件。
  • 我希望有人在他们的项目中做过类似的事情,并准备建议我实现这一目标。

标签: c# asp.net-mvc razor role-based-access-control


【解决方案1】:

您真的要隐藏用户无权更新的控件吗? 或者只是在他们点击保存/更新按钮时显示未经授权的错误 (return new HttpUnauthorizedResult();)。如果您更喜欢后者,这里有一种方法:

  1. 您的剃刀视图不会使用任何授权码。
  2. 创建一个类似“All Authorized X app”的组/角色
  3. 为各个职能创建组/角色,例如“X 管理员”、“X 发起人”、“X 审阅者”和“X 指南”
  4. 将第三个项目符号中的所有组/角色添加到第二个项目符号中
  5. [Authorize ("Roles="All Authorized X app")]一样装饰你的控制器
  6. 在您的保存/更新操作中,使用if(User.IsInRole("X Administrators"))if(User.IsInRole("X Reviewer"))

【讨论】:

  • 我不想隐藏控件,但我想限制用户更新这些控件上的任何内容,或者您​​可以说禁用这些字段。正如我在问题中提到的,在单个视图中,某些角色将有权访问某些 UI 控件,而其他角色将有权访问其他一些 UI 控件。
  • "在单个视图中,某些角色将有权访问某些 UI 控件,而其他角色将有权访问某些其他 UI 控件" 我所描述的设计将允许您这样做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-12
  • 2013-11-06
  • 2010-09-11
  • 1970-01-01
  • 2015-07-22
  • 2012-01-25
相关资源
最近更新 更多