基于用户角色的MVC3验证

时间:2011-05-27 00:22:15

标签: validation asp.net-mvc-3 roleprovider

我们正在使用MVC3和 unobstructuve 验证,一切都很好;我们在服务器和客户端上都可以使用自定义验证。

我们还使用内置的asp.net 角色提供程序。我们有特定的观点,我们用于不同的角色。根据登录用户的角色,某些字段(ViewModel的属性)是必需的。

我的问题是:我们如何根据角色制作 ValidationAttribute ?当用户是普通用户时,我们想要一个属性必需;但是当用户是管理员时,我们不希望使该字段成为必需。但我们确实想使用相同的观点。

我知道我们可以创建一个自定义 ValidationAttribute (创建一个派生自 ValidationAttribute 的类)我想这对于服务器端验证会很好。但我们真的想验证这个客户端。

我认为我们在上面的 ValidationAttribute 中实现了 IClientValidatable ,并编写了一些jQuery来向服务器发出Ajax调用,以检查当前登录的用户及其角色。 但这会使我们每次特定属性更改时都会执行Ajax调用,并且登录用户不会更改。

这样做的正确方法是什么?或者我们应该为不同的登录用户创建不同的 ViewModels 吗?

如果我的上述说明没有意义,请告诉我,我可以在需要时添加一些示例代码。

感谢任何帮助。

谢谢,

皮姆

1 个答案:

答案 0 :(得分:0)

我认为你确实可以实现一个自定义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相同的不显眼的必需属性,但仅限于满足条件。