asp.net - 如何控制对 ASP.Net MVC 3 View 上的表单字段的访问?

标签 asp.net asp.net-mvc asp.net-mvc-3 razor

示例

用户“jtirado”被分配角色“HR-Assistant”,可以访问路由“mymvcapp/employeee/edit/1452”编辑员工(id:1452)数据。

作为“HR助理”,该用户可以更改员工电话号码和电子邮件,可以查看员工工资但不能编辑金额。

电话号码、电子邮件、工资是数据库字段,并由 View 上的“asp.net-mvc-control”或“HTML-control”表示/呈现。因此,我想根据用户的角色限制对这些控件的访问。

过往经历

我之前曾使用 MasterPage、BasePage 类和 RoleBasedAccessControl 数据库模型对经典的 3 层 ASP.Net 3.5 Web 表单应用程序执行过此操作。

MasterPage 根据用户分配的角色构建用户有权访问的选项菜单。

BasePage 类检查用户是否有权访问所需页面,如果可以,则检查用户可以编辑哪些控件(例如:DdlClientType、TxtLastName、ChkIsActive)。

这样,我就不必使用 if-then 语句来检查权限,并且可以创建任意数量的角色,并授予他们任何权限,而无需更改任何 C# 代码。

我计划为这个新的 MVC 应用程序使用相同的 RoleBasedAccessControl 数据库模型。

问题

所以我的疑问是如何使用 ASP.Net MVC 3 实现 MasterPage 和 BasePage 类,或者是否有其他方法可以实现这一点,以及我是否应该以其他方式实现。

在我看来,ViewMasterPage 相当于 Web-Forms-MasterPages 的 MVC。我还听说过 Razor 布局页面。

无论如何,我想我应该在 Controller 中处理所有这些。

我将使用:

  1. ASP.NET MVC 3.0
  2. Razor

我检查了这些帖子:

asp.net mvc user permissions and views

Best Practices for controlling access to form fields

Best practices for control permissions?

ASP.NET MVC Master Pages

Implement secure ASP.NET MVC applications

但它们并不完全适合我的情况。

最佳答案

听起来您可以使用自定义编辑器模板,并在其中添加逻辑。

在您的 View 模型中,您可以使用属性来确定将使用哪个模板 - 或者使用 UIHint ,或者通过设置 DataType 属性并为其提供自定义模板。

然后您的编辑器模板可以确定是否呈现编辑或显示值(或完全隐藏它)。不要忘记在 Binder 中强制执行相同的规则,否则您就有可能让用户操纵他们不应访问的数据。

关于asp.net - 如何控制对 ASP.Net MVC 3 View 上的表单字段的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12164937/

相关文章:

c# - MVC 添加记录到数据库

c# - 在 c#.net 中动态加载带有文本的下拉列表并在下拉列表项中附加带有文本的图像

c# - 获取相同类型对象的两个列表之间的差异

ASP.NET MVC : Use byte array as source of IMG tag through ViewData?

c# - 在 MVC 3 中对多个 View 使用相同的 Controller

asp.net-mvc-3 - 如何简化 MVC3 路由?

javascript - AngularJs:如何在不同域上设置相同的cookie

c# MVC 路径中的非法字符

asp.net-mvc-3 - 如何在 Orchard 的替代 View 中包含模块资源?

asp.net - 在 TextChanged 上停止回发