MVC3验证基于用户角色
问题描述:
我们使用MVC3与unobstructuve验证,一切都很好;我们在服务器以及客户端上获得了自定义验证。MVC3验证基于用户角色
我们也在使用内建的asp.net 角色提供者。我们有特定的观点,我们用于不同的角色。根据登录用户的角色,某些字段(ViewModel的属性)是必需的。
我的问题是:我们如何制作一个ValidationAttribute基于角色?我们想要创建一个属性当用户是普通用户时需要;但是当用户是管理员时,我们不想让该字段成为必需字段。但我们确实想要使用相同的观点。
我知道我们能(从创建派生的类ValidationAttribute)创建一个自定义ValidationAttribute我想这将正常工作的服务器端验证。但我们真的想要验证这个客户端。
我认为我们在上面ValidationAttribute实施IClientValidatable和写一些jQuery来让Ajax调用返回到服务器,以检查登录的用户及其角色的电流。 但是这会让我们在每次特定属性更改时都会执行Ajax调用,并且登录用户不会更改。
这样做的正确方法是什么?或者我们应该为不同的登录用户创建不同的ViewModels?
请让我知道,当我的上述解释没有道理时,我可以在需要时添加一些示例代码。
任何帮助表示赞赏。
感谢,
皮姆
答
我觉得你确实可以实现自定义ValidationAttribute也实现了IClientValidatable。但你可能只是“再利用”的客户端不显眼的要求验证:
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
if (<your condition, e.g. if user has a certain role>)
yield return new ModelClientValidationRequiredRule(<error message>);
}
这应该产生的输入作为RequiredAttribute标签相同的不显眼的必需的属性,但只有当你的条件得到满足。
谢谢!这正是我所追求的。 – Pim 2011-05-29 23:54:59