C# 更好的方式来设计我的方式';我正在对视图字段执行用户权限

C# 更好的方式来设计我的方式';我正在对视图字段执行用户权限,c#,.net,asp.net-mvc,permissions,html-helper,C#,.net,Asp.net Mvc,Permissions,Html Helper,因此,目前在我们的代码中,我们有一系列关于访问登录到web应用程序的特定用户的角色和权限的类。这是建立良好,工作良好。但是,现在出现的一个特定要求不仅是能够将某些页面(整个视图)限制为某些权限,还包括这些视图上的特定字段。因此,您可能有查看视图的能力,但您可能只有查看该页面上某些字段的权限 我们使用ASP.NET/C#中的HTML帮助程序生成大多数字段。例如,我们需要根据权限阻止/显示一个: <%= Html.CheckBoxFor(m => m.Current, new { @cl

因此,目前在我们的代码中,我们有一系列关于访问登录到web应用程序的特定用户的角色和权限的类。这是建立良好,工作良好。但是,现在出现的一个特定要求不仅是能够将某些页面(整个视图)限制为某些权限,还包括这些视图上的特定字段。因此,您可能有查看视图的能力,但您可能只有查看该页面上某些字段的权限

我们使用ASP.NET/C#中的HTML帮助程序生成大多数字段。例如,我们需要根据权限阻止/显示一个:

<%= Html.CheckBoxFor(m => m.Current, new { @class = "economicTextBox", propertyName = "Current", onchange = "UseCurrent();UpdateField(this);" })%>
m.Current,新的{@class=“economicTextBox”,propertyName=“Current”,onchange=“UseCurrent();UpdateField(this);”})%%>
我的第一个想法就是在这之前在类似的嵌入式C#代码中执行权限检查,并将HTML助手放在一个“if”语句中,这样它只有在用户有权限的情况下才会呈现。当我看到前端变得非常臃肿,脑子里都是这些话时,我又开始怀疑自己,并认为可能有更好的方法


你们有谁能推荐什么吗?谢谢。

将用户权限作为模型的单独模块。创建包含要显示/隐藏的代码块的局部视图。将模块传递到局部视图,并让视图保存要显示的内容的逻辑

这意味着您可以在局部视图中创建一个逻辑块,其中的决策是一些基本的ifs或开关,以及用于显示它的标记,使其更加清晰和易于管理

例如,假设您创建了一个所有页面模型都继承的权限模型,从而确保您可以向所有页面传递相同的权限。然后可以调用视图并将其传递给模型,如下所示:

这将保留用户导航的标记和逻辑。在这个局部视图中,您可以让它继承您的权限对象:

然后,您可以在标记中执行更基本的逻辑,或者让html助手执行繁重的工作,并返回一些枚举/属性,以便对更基本的代码进行决策。比如,

<%
if (Model.User.IsAdmin)
{
%>
...html...
<%
}
else
{
%>
...html...
<%
}
%>

…html。。。
…html。。。

作为模型的一个单独模块拥有用户权限。创建包含要显示/隐藏的代码块的局部视图。将模块传递到局部视图,并让视图保存要显示的内容的逻辑

这意味着您可以在局部视图中创建一个逻辑块,其中的决策是一些基本的ifs或开关,以及用于显示它的标记,使其更加清晰和易于管理

例如,假设您创建了一个所有页面模型都继承的权限模型,从而确保您可以向所有页面传递相同的权限。然后可以调用视图并将其传递给模型,如下所示:

这将保留用户导航的标记和逻辑。在这个局部视图中,您可以让它继承您的权限对象:

然后,您可以在标记中执行更基本的逻辑,或者让html助手执行繁重的工作,并返回一些枚举/属性,以便对更基本的代码进行决策。比如,

<%
if (Model.User.IsAdmin)
{
%>
...html...
<%
}
else
{
%>
...html...
<%
}
%>

…html。。。
…html。。。
我的第一个想法就是玩游戏 检查类似文件中的权限 就在这之前嵌入了C代码 将HTML帮助程序放入“如果” 语句,因此只有在 用户拥有该权限。我支持 当我看到前面的时候,我猜我自己 所有这些都会让你变得非常臃肿 我脑海中的这些陈述 我想可能有更好的方法 去做吧

if
放在Html助手中,并将执行条件检查所需的数据传递给助手函数

视图:

我的第一个想法就是玩游戏 检查类似文件中的权限 就在这之前嵌入了C代码 将HTML帮助程序放入“如果” 语句,因此只有在 用户拥有该权限。我支持 当我看到前面的时候,我猜我自己 所有这些都会让你变得非常臃肿 我脑海中的这些陈述 我想可能有更好的方法 去做吧

if
放在Html助手中,并将执行条件检查所需的数据传递给助手函数

视图:


有趣的想法。我会调查的。还有其他想法吗?我想这也会使添加其他权限属性变得更容易,并允许您对部分视图进行类似的更改。您甚至可以通过再次传递更复杂的局部视图来再次抽象它。我喜欢这个想法,只是在可视化上有点困难。我添加了一些基本的代码来帮助说明它是否有用?有趣的想法。我会调查的。还有其他想法吗?我想这也会使添加其他权限属性变得更容易,并允许您对部分视图进行类似的更改。您甚至可以通过再次传递更复杂的局部视图来再次抽象它。我喜欢这个想法,只是在可视化上有点困难。我已经添加了一些基本代码来帮助说明它,如果有帮助的话?
public HtmlString PermissionControlledFieldOne(....) {
  if (performSecurityCheck(someUserData, otherData)) {
    // .. render partial or build html or whatever you need
  }