Forms 动态表单验证管理冲突

Forms 动态表单验证管理冲突,forms,validation,dynamic,Forms,Validation,Dynamic,我正在构建一个带有管理员模块和用户模块的数据库支持的web应用程序。管理员模块允许管理员修改存储在数据库中的实体的属性。用户模块根据数据库的状态为动态生成的表单提供服务 考虑以下用例: 用户请求包含表单的网页,其中显示的表单选项表示满足特定条件的DB实体 包含动态生成表单的请求页面已加载 管理员在数据库中对表单中加载的某些实体进行更改,使其不再符合表单中显示的条件(即未激活、未关联) 用户提交表单时,至少选择了一个不再符合表单中显示条件的实体 在这种情况下,提交表单的服务器端验证应该通过还是失败

我正在构建一个带有管理员模块和用户模块的数据库支持的web应用程序。管理员模块允许管理员修改存储在数据库中的实体的属性。用户模块根据数据库的状态为动态生成的表单提供服务

考虑以下用例:

  • 用户请求包含表单的网页,其中显示的表单选项表示满足特定条件的DB实体
  • 包含动态生成表单的请求页面已加载
  • 管理员在数据库中对表单中加载的某些实体进行更改,使其不再符合表单中显示的条件(即未激活、未关联)
  • 用户提交表单时,至少选择了一个不再符合表单中显示条件的实体
  • 在这种情况下,提交表单的服务器端验证应该通过还是失败

    向用户提供了有效的表单,但由于用户在页面上时发生管理员更改,发布的表单内容相对于数据库的当前状态不再有效


    如果应该通过,我应该在加载页面时根据数据库的状态验证数据(利用数据库历史记录或使用会话)或者这是过分的,我可以只验证发布的实体是否有效,但不一定符合当前的表单标准?

    如果不更改数据库属性,效果会更好。更改数据库属性将导致Web应用程序出错。尝试为admin创建一个表单,其中表单的值从数据库中获取并显示。这样,管理员只修改数据库中包含的值。通过使用此方法,您的db属性将保持不变。并尽量不让管理员直接访问数据库

    处理方法应与处理“丢失更新”问题类似,因为这是一个丢失更新问题。两个人同时拾取一行进行编辑,谁的更改被保留,谁的更改丢失?第一个人的更改被持久化,第二个人被通知更新失败——这是标准方法。在这种情况下,管理员是第一个更新的人——尽管用户可能是第一个阅读的人。因此,验证失败,并通知用户数据已过时,并显示当前数据


    希望这能有所帮助。

    我不确定我是否理解你的建议,或者它与我的问题有什么关系。如果我不清楚,我很抱歉。当我说管理员正在更改db属性时,我并不是说管理员正在更改表结构或模式,而是在更改值和/或插入/更新行。我的主要问题是我应该如何处理包含过时数据的已发布表单?数据过时是因为管理员通过管理员界面修改了数据库中的特定值,该界面用于显示用户已加载并开始填写但尚未发布的动态表单。发布数据时,应将其视为有效还是无效?关于如何解决或避免这种情况有什么想法?