因此,目前在我们的代码中,我们有一堆类围绕访问登录到 Web 应用程序的特定用户的角色和权限。这建得很好,而且运作良好。但是,现在出现的一个特定要求不仅是能够限制某些页面(整个 View )的某些权限,而且还包括那些 View 上的特定字段。因此,您可能能够查看某个 View ,但您可能只有允许您查看该页面上某些字段的权限。
我们在 ASP.NET/C# 中使用 HTML Helpers 生成我们的大部分字段。例如,这里是我们需要根据权限阻止/显示的一个:
<%= Html.CheckBoxFor(m => m.Current, new { @class = "economicTextBox", propertyName = "Current", onchange = "UseCurrent();UpdateField(this);" })%>
我的第一个想法是在此之前在类似的嵌入式 C# 代码中进行权限检查,并将 HTML Helper 放在“if”语句中,这样它只会在用户获得权限时呈现。当我看到前端因所有这些语句而变得非常臃肿时,我再次猜测自己,并认为可能有更好的方法来做到这一点。
有大佬推荐一下吗?谢谢。
最佳答案
将用户权限作为模型的单独模块。创建包含要显示/隐藏的代码块的部分 View 。将模块传递给分部 View ,并让 View 保存显示内容的逻辑。
这应该意味着您可以在您的部分 View 中创建一个逻辑 block ,决定是一些基本的 ifs 或开关,以及用于显示它的标记更加清晰和易于管理。
例如,假设您创建了一个所有页面模型都继承的权限模型,从而确保您可以将相同的权限传递给所有页面。然后你可以像这样调用一个 View 并将模型传递给它:
<%Html.RenderPartial("Widgets/NavigationUserControl"); %>
这将保留用户导航的标记和逻辑。在此部分 View 中,您将让它继承您的权限对象:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WebApp.Web.Models.Permissions>" %>
然后您可以在标记中执行更基本的逻辑,或者让 html 助手执行繁重的工作并返回一些枚举/属性以供更基本的代码进行决策。例如;
<%
if (Model.User.IsAdmin)
{
%>
...html...
<%
}
else
{
%>
...html...
<%
}
%>
关于c# - 更好的方式来构建我在 View 字段上执行用户权限的方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4673449/