如何在数据集 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个回答
0
投票

我相信您可以结合使用 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.