有没有办法在 CKAN 中为非系统管理员禁用 API 令牌?

Is there a way to disable API tokens for non-Sysadmins in CKAN?

基本上,我想完全禁用除系统管理员 (v2.9.1) 以外的所有用户的 API 访问权限。

  1. 在代码的什么地方可以看到与此相关的逻辑?我能找到的最接近的是 via
$ grep -rnw /usr/lib/ckan/default/src/ckan -e 'api-tokens'
/usr/lib/ckan/default/src/ckan/ckan/views/user.py
/usr/lib/ckan/default/src/ckan/doc/api/index.rst
/usr/lib/ckan/default/src/ckan/doc/maintaining/configuration.rst

...user.py 文件似乎是基于 Django 的,但没有太多使用该框架的经验,无法真正了解此处应更改的内容。还有其他地方可以看吗?

  1. 有没有办法通过 ckan CLI 为用户(例如选定的系统管理员)创建 API 令牌?

目前只是对网络中的非系统管理员用户隐藏 API 令牌生成选项卡 ​​UI html (https://github.com/ckan/ckan/blob/cc000d3acf7401957d8321be53e8cabc2d9ebf3a/ckan/templates/user/api_tokens.html) by a similar mechanism that html templates can control visibility of the Visibility functionality of packages here (https://github.com/ckan/ckan/blob/master/ckan/templates/package/snippets/package_basic_fields.html#L72)...

{% set user_is_sysadmin = h.check_access('sysadmin') %}
{% block page_primary_action %}
        {% if user_is_sysadmin %}

            {% if h.check_access('api_token_create', {'user': user['name']}) %}
            .
            .
            .
            {% endif %}
        {% endif %}
{% endblock page_primary_action %}

请注意,将条件放在块标记模板中很重要(原为 and confused me for some time). This is (seems to be) due to the fact the the API tokens tab jinja2 template is an extension (child?) of the user/read_base.html template (https://github.com/ckan/ckan/blob/cc000d3acf7401957d8321be53e8cabc2d9ebf3a/ckan/templates/user/api_tokens.html#L1)。

IDK 如果可以通过 public API 生成令牌。为此,需要通过 API:

检查似乎与 API 令牌创建相关的文件

检查完后会更新post。


更新:

https://github.com/ckan/ckan/blob/d43ce9bfd882f63c986711e2d59e186a58c8e489/ckan/logic/auth/create.py#L258 可以修改为...

def api_token_create(context, data_dict):
    """
    Create new token for current user.
    """
    user = context['model'].User.get(data_dict['user'])
    return {'success': (user.name == context['user']) and (authz.is_sysadmin(user.name))}

...应该 limit/restrict (https://docs.ckan.org/en/2.9/contributing/architecture.html?highlight=architecture#auth-functions-and-check-access) API 访问。

也进行此更改(我只是认为,因为这似乎是 api_token_create(https://github.com/ckan/ckan/blob/d43ce9bfd882f63c986711e2d59e186a58c8e489/ckan/logic/auth/create.py#L258)的唯一用途)隐藏了 API 令牌创建用户个人资料管理屏幕中的选项卡 (https://github.com/ckan/ckan/blob/cc000d3acf7401957d8321be53e8cabc2d9ebf3a/ckan/templates/user/api_tokens.html#L6)。 (因此可以摆脱在块模板内进行条件检查的代码)。