ASP.Net MVC优雅的UI和ModelBinder授权

标签 asp.net asp.net-mvc user-interface authorization modelbinders

我们知道授权的内容是一个跨领域的问题,我们会尽一切努力避免在我们的 View 中合并业务逻辑。

但我仍然没有找到一种优雅的方法来使用当前用户角色过滤 UI 组件(例如小部件、表单元素、表格等),而不用业务逻辑污染 View 。这同样适用于模型绑定(bind)。


示例

表单:产品创建

字段:

  • 姓名
  • 价格
  • 折扣

角色:

  • 角色管理员

    • 允许查看和修改“名称”字段
    • 允许查看和修改价格字段
    • 可以查看和修改折扣
  • 角色管理员助理

    • 可以查看和修改姓名
    • 可以查看和修改价格

每个角色中显示的字段不同,并且模型绑定(bind)需要忽略“管理员助理”角色的折扣字段

你会怎么做?

最佳答案

我认为要做到这一点的方法是创建您自己的 input extension methods 版本。例如,您可以创建 TextBoxRoles 并按如下方式定义它,而不是 TextBox:

public static MvcHtmlString TextBoxRoles(
    this HtmlHelper htmlHelper,
    string name,
    string RolesEdit,
    string RolesView
)

然后在代码中它看起来像这样:

<%= Html.TextBoxRoles("Price", "Administrator","Administrator,Assistant") %>

然后,您的 TextBoxRoles 实现将通过 User.IsInRole() 检查当前用户的角色,以确定页面上应显示的内容。

当然,您必须为您使用的每个输入扩展方法执行此操作。

关于ASP.Net MVC优雅的UI和ModelBinder授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2738390/

相关文章:

c# - 没有鉴别器的来自不同来源的 EF Core 实体继承

c# - .net 4.0 中的 System.Web.UI.DataVisualization.Charting 丢失错误?

c# - 使用 C# 接口(interface)扩展现有应用程序

c# - Open XML SDK 文字处理 表格单元格中的垂直方向

asp.net-mvc - 合并后从外部文件转换 appSettings

asp.net-mvc - Razor:无法在 @Section 中渲染 Html.Label 帮助程序(仅输出源)

asp.net - 如何在 IIS 中使用 nonce 进行内容安全策略?

Android 边距弹出下拉微调器

java - 为 SWT Combo 小部件中的每个元素设置工具提示文本

macos - 适用于OCaml程序的Mac OS GUI