因此,目前在我们的代码中,我们有许多类可以访问登录到Web应用程序的特定用户的角色和权限。这个很好,很好用。但是,现在出现的某个要求不仅是将某些页面(整个视图)限制为某些权限的能力,还包括这些视图上的特定字段。因此,您可能能够查看视图,但您可能只拥有一个权限,可以让您查看该页面上的某些字段。
我们在ASP.NET / C#中使用HTML Helpers生成大部分字段。例如,根据权限我们需要阻止/显示这个:
<%= Html.CheckBoxFor(m => m.Current, new { @class = "economicTextBox", propertyName = "Current", onchange = "UseCurrent();UpdateField(this);" })%>
我的第一个想法就是在此之前对类似的嵌入式C#代码中的权限进行检查,并将HTML Helper放在“if”语句中,因此只有在用户拥有权限时才会呈现。当我看到前端在我的脑海中充满了所有这些陈述时,我第二次猜到了自己,并且认为可能有更好的方法来做到这一点。
你们中的任何人都可以推荐什么吗?感谢。
答案 0 :(得分:2)
将用户权限作为模型的单独模块。创建包含要显示/隐藏的代码块的部分视图。将模块传递给局部视图,让视图保持显示内容的逻辑。
这应该意味着你可以在局部视图中创建一个逻辑块,决定是一些基本的ifs或开关,并标记显示它更加清晰和易于管理。
例如,假设您创建了一个所有页面模型都继承的权限模型,从而确保您可以将相同的权限传递给所有页面。然后,您可以调用视图并将模型传递给它:
<%Html.RenderPartial("Widgets/NavigationUserControl"); %>
这将保留用户导航的标记和逻辑。在这个局部视图中,您可以继承权限对象:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WebApp.Web.Models.Permissions>" %>
然后你可以在标记中执行更基本的逻辑,或者让html帮助程序执行grunt工作并返回一些枚举/属性以获得更基本的代码来做决定。例如;
<%
if (Model.User.IsAdmin)
{
%>
...html...
<%
}
else
{
%>
...html...
<%
}
%>
答案 1 :(得分:2)
我的第一个念头就是玩 检查类似的权限 在此之前嵌入了C#代码 把HTML Helper放在“if”中 声明,所以它只会渲染 用户有权限。我第二个 当我看到前方时猜到了自己 所有的结局变得非常臃肿 这些陈述在我的脑海里,而且 以为可能有更好的方法 做到这一点。
将if
放在 Html Helper中,并将帮助函数传递给执行条件检查所需的数据。
查看:
<body>
<p>text</p>
<%: Html.PermissionControlledFieldOne(someUserData, otherData) %>
助手:
public HtmlString PermissionControlledFieldOne(....) {
if (performSecurityCheck(someUserData, otherData)) {
// .. render partial or build html or whatever you need
}