【问题标题】:Field level access of a model in asp.net mvc 4asp.net mvc 4中模型的字段级访问
【发布时间】:2013-08-15 19:28:22
【问题描述】:

我有这样的需求,

根据不同的角色将模型中的字段设置为读或写

假设在一个模型中我有 15 个字段,那么

具有 Role1 的用户 1 可以编辑 {字段 1 到 5;但可以查看(只读)字段 6 到 15 } 和

具有 Role2 的 User2 可以编辑 {Fields 4 ,5,6;但可以查看(只读)字段 1 到 3 、7 到 15}

我用谷歌搜索了很多,但我找不到解决方案

我找到了一个链接 http://www.codeproject.com/Tips/403921/Field-Based-Security-in-ASP-NET-MVC-3-for-Differen

但是使用文章我们必须为不同的控件创建编辑模板以使其读/写

这是项目的主要任务之一。

你有什么解决办法吗?

谢谢, 维杰

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    我不知道您是否曾经提出过解决方案,如果您提出了解决方案,我很想知道,但对于其他偶然发现这个问题的人来说,我最终做的是传递一个列表用户对视图模型具有只读访问权限的所有字段的名称,然后在我的 cshtml 页面中,我检查该字段是否是该列表的一部分,并据此禁用输入标记。

    public class DataFields{
        public string Field1 {get; set;}
        public string Field2 {get; set;}
        public string Field3 {get; set;}
        public string Field4 {get; set;}
        public string Field5 {get; set;}
    }
    
    public class DataFieldsViewModel{
        public DataFields DataFields {get; set;}
        public IEnumerable<string> ReadOnlyFields {get; set;}
    }
    

    然后在我的cshtml页面上是这样的:

    @var isField1ReadOnly = Model.ReadOnlyFields.Contains(nameof(Model.DataFields.Field1));
    @var isField2ReadOnly = Model.ReadOnlyFields.Contains(nameof(Model.DataFields.Field2));
    @var isField3ReadOnly = Model.ReadOnlyFields.Contains(nameof(Model.DataFields.Field3));
    @var isField4ReadOnly = Model.ReadOnlyFields.Contains(nameof(Model.DataFields.Field4));
    @var isField5ReadOnly = Model.ReadOnlyFields.Contains(nameof(Model.DataFields.Field5));
    
    ...
    
    <input asp-is-disabled="@(isField1ReadOnly)" asp-for"Model.DataFields.Field1">
    <input asp-is-disabled="@(isField2ReadOnly)" asp-for"Model.DataFields.Field2">
    

    asp-is-disabled 是基于这样的:https://stackoverflow.com/a/34868369/4573789

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多