【发布时间】:2015-01-27 05:35:27
【问题描述】:
我们正在开发一个类似工作流的应用程序。我们希望为不同的用户角色显示相同的表单(具有相同的ViewModel 和相同的View)。我们希望根据特定的用户角色使某些字段只读不可编辑。
ViewModel 就像:
public class ServiceViewModel
{
[EditableIfInRoles("Administrator", "Editor")]
public string ServiceId { get; set; }
}
我们计划创建一个自定义ReadOnlyAttribute,例如:
public class EditableIfInRolesAttribute : EditableAttribute
{
private IEnumerable<string> _allowedRoles;
public EditableIfInRolesAttribute(params string[] allowedRoles) : base(true)
{
_allowedRoles = allowedRoles;
}
/// <summary>
/// Currently we don't know which method to override
/// </summary>
/// <param name="value"></param>
/// <returns></returns>
public override bool IsEditable(object value)
{
return _allowedRoles.Any(e => HttpContext.Current.User.IsInRole(e));
}
}
我们期望未经授权的用户角色呈现的 HTML 是:
<input class="form-control global" id="ServiceID" name="ServiceID" type="text" value="" readonly="readonly">
如何创建继承ReadOnlyAttribute 或“EditableAttribute”的自定义属性,因为它们都是密封类?
重写什么方法?或者有没有其他解决方案?
谢谢。
【问题讨论】:
标签: c# asp.net asp.net-mvc asp.net-mvc-4