示例
用户“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 中处理所有这些。
我将使用:
- ASP.NET MVC 3.0
- Razor
我检查了这些帖子:
asp.net mvc user permissions and views
Best Practices for controlling access to form fields
Best practices for control permissions?
Implement secure ASP.NET MVC applications
但它们并不完全适合我的情况。
最佳答案
听起来您可以使用自定义编辑器模板,并在其中添加逻辑。
在您的 View 模型中,您可以使用属性来确定将使用哪个模板 - 或者使用 UIHint ,或者通过设置 DataType 属性并为其提供自定义模板。
然后您的编辑器模板可以确定是否呈现编辑或显示值(或完全隐藏它)。不要忘记在 Binder 中强制执行相同的规则,否则您就有可能让用户操纵他们不应访问的数据。
关于asp.net - 如何控制对 ASP.Net MVC 3 View 上的表单字段的访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12164937/