1

我有这样的需求,

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

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

具有角色 1 的用户 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

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

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

您对此有什么解决方案。

谢谢,维杰

4

1 回答 1

0

我不知道您是否曾经想出解决方案,如果您这样做了,我很想知道,但对于其他偶然发现这个问题的人来说,我最终做的是传递所有人的名字列表用户对视图模型具有只读访问权限的字段,然后在我的 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

于 2020-06-04T21:00:41.427 回答