【问题标题】:How to customize authz.py file in CKAN extension?如何在 CKAN 扩展中自定义 authz.py 文件?
【发布时间】:2025-12-28 19:05:12
【问题描述】:

我想在 CKAN 中添加新角色。我可以在 authz.py 文件中执行此操作。我定义了一个新角色,并对角色采取了一些行动,它奏效了。但我在基线中做到了这一点。我想在扩展中做到这一点。所以我创建了名为“customroles”的新扩展。我将 authz.py 从“/usr/lib/ckan/default/src/ckan/ckan”复制到自定义文件夹“/usr/lib/ckan/default/src/ckanext-customroles/ckanext/customroles”。然后我添加了新角色(超级),您可以在下面看到代码。

ROLE_PERMISSIONS = OrderedDict([
    ('admin', ['admin']),
    ('editor', ['read', 'delete_dataset', 'create_dataset', 'update_dataset', 'manage_group']),
    ('member', ['read', 'manage_group']),
    **('super', ['read', 'delete_dataset', 'create_dataset', 'manage_group']),**
])


def _trans_role_admin():
    return _('Admin')


def _trans_role_editor():
    return _('Editor')


def _trans_role_member():
    return _('Member')

def _trans_role_super():
    return _('Super')

但是当我在组织页面中添加新成员时,我看不到新角色。当我修改基本代码时,我看到了新角色。但在扩展它没有工作。

我需要做任何其他事情来修改扩展名中的 authz.py 文件吗?你知道我该如何解决这个问题吗?

谢谢,

【问题讨论】:

    标签: python ckan


    【解决方案1】:

    据我所知,目前这在扩展中是不可能的。

    CKAN 授权架构的某些部分可以通过插件进行修改和扩展,例如通过IAuthFunctionsIAuthenticatorIPermissionLabels 接口。但是,ckan.authz 中的角色是硬编码的。

    您可以尝试使用 IAuthFunctions 覆盖 CKAN 的内置身份验证函数以创建类似的效果。特别是,您可以使用该方法从某些editor 成员中删除一些特权,使他们成为您尝试实现的“超级”用户。 (请注意,向member 用户添加 权限可能 起作用,因为即使您修改后的身份验证函数会授予他们访问权限,这些用户也会根据他们的角色未能通过检查)

    它不会解决您当前的问题,但我认为 CKAN 支持您正在尝试做的事情会很好。因此,我在 CKAN 的功能讨论跟踪器中创建了a ticket。随意添加有关您的用例的更多信息。

    【讨论】:

    • 超级用户及其权限只是示例。这不是我想要创造的。我想创建具有不同权限的不同角色。所以改变当前角色的权限不适合我。我需要添加新角色。而且我还在基本代码(authz.py)中为成员添加了新权限,并且它起作用了。
    • 我明白了。在这种情况下,您要么需要运行 CKAN 的补丁版本,要么努力在 CKAN 中支持通过插件修改 authz。