Skooma 输入验证器

Skooma input validator

我的任务是使用 Skooma 库实现输入验证器 https://github.com/bobfp/skooma#validators

一般概念很清楚,但对于某些输入,我有一个“合法”单词列表,而且我对如何针对这种情况实施验证一无所知。 因此我来这里的原因,我想问一下您是否知道使用该库的任何示例/项目?我用谷歌搜索但没有找到任何东西。 如果您有任何其他建议,请告诉我! 这是示例:

我的架构:

schema = %{
:titel => :string, 
:category => :string, 
:high_level_category => :string, 
:description => :string, 
:potential_impacts => :string, 
:affected_assets => :string, 
:rating => :string }

类别的合法输入:

category = %{core: 'Core network threats', access: 'Access network threats', multi: 'Multi edge computing threats',
virtualisation: 'Virtualisation threats', phyiscal: 'Physical infrastructure threats', generic: 'Generic threats'}

我也用普通列表试过,比如

category = ['Core network threats', 'Access network threats', 'Multi edge computing threats' .......]

但我无法理解如何检查类别列表中是否存在 :category。

你需要一个custom validator函数,下面是一个例子:

alias Skooma.Validators

@valid_categories [
  "Access network threats",
  "Core network threats",
  "Generic threats",
  "Multi edge computing threats",
  "Physical infrastructure threats",
  "Virtualisation threats"
]

def valid?(data), do: Skooma.valid?(data, schema())

defp schema,
  do: %{
    :category => [:string, inclusion(@valid_categories)],
    ... # rest of the schema
  }

# copied from:
# https://github.com/bobfp/skooma/blob/master/lib/validators.ex#L38-L48
defp inclusion(values_list) when is_list(values_list) do
  fn data ->
    bool = data in values_list

    if bool do
      :ok
    else
      {:error, "Value is not included in the options: #{inspect(values_list)}"}
    end
  end
end

您可以将 inclusion 函数替换为 Validators.inclusion/1。在这种情况下,您需要从 Github 安装 Skooma,因为它尚未在今天(2022 年 1 月 31 日)发表演讲。