如何将其他可见性选项添加到数据记录的 CKAN 表单中?

问题描述 投票:0回答:1

我想知道是否有一种简单的方法来更改 CKAN 数据集形式。我对添加额外的可见性选项而不是publicprivate感兴趣: 也就是说;

  1. 公开
  2. 私人
  3. 子项目
  4. 项目
  5. 组织/公司/机构

CKAN 使用

package_basic_fields.html

...

 {% if show_visibility_selector %}
    {% block package_metadata_fields_visibility %}
    <div class="form-group control-medium">
      <label for="field-private" class="form-label">{{ _('Visibility') }}</label>
      <div class="controls">
        <select id="field-private" name="private" class="form-control">
          {% for option in [('True', _('Private')), ('False', _('Public'))] %}
          <option value="{{ option[0] }}" {% if option[0] == data.private|trim %}selected="selected"{% endif %}>{{ option[1] }}</option>

          ### I want to add extra options here

          {% endfor %}
        </select>
      </div>
    </div>
    {% endblock %}
    {% endif %}

    {% if show_organizations_selector and show_visibility_selector %}

...

ckanext-scheming也没有谈论这个。

有什么推荐给我吗?

python jinja2 ckan
1个回答
1
投票

我相信您可以通过结合ckanext-scheming和CKAN提供的接口来实现这一点:IPackageController和可能的IPermissionLabels。

想法如下:

  1. 找到scheming中渲染Visibility选项的地方。我相信它位于 templates/scheming/form_snippets/organization.html
  2. 使用CSS隐藏可见性
  3. 添加一个新字段,其中包含您所需的可见性选项。
  4. 在 IPackageController 中,检查此字段的值并手动设置 ckan 的可见性(您很可能希望此处的所有选项均为 Private(除 Public 之外))。您现在已经设置了 ckan 的可见性,而且还拥有有关自定义可见性字段的信息。
  5. 使用 IPermissionLabels 实现用户和包之间所需的可见性级别。

CKAN 并不是为这样的事情而设计的,但我确信这是一种可以在此处或那里进行一些调整的解决方法。

编辑: 我确认我已经按照上面所写的内容成功实现了类似的功能。就我而言,我想添加具有数据集公共元数据的选项,但不允许非授权用户读取资源或下载资源。为此,我还必须使用 IResourceController,手动检查是否允许用户访问资源以及在什么级别访问资源。

© www.soinside.com 2019 - 2024. All rights reserved.