如何在 CKAN 扩展中自定义 authz.py 文件?

How to customize authz.py file in CKAN extension?

我想在 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 扩展文件?你知道我该如何解决这个问题吗?

谢谢,

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

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

您可以尝试使用 IAuthFunctions 覆盖 CKAN 的内置身份验证功能来创建类似的效果。特别是,您可以使用该方法从某些 editor 成员中删除某些特权,使他们成为您尝试实现的 "super" 用户。 (请注意,member 用户添加 权限可能 不会 起作用,因为这些用户将无法通过基于其角色的检查,即使您修改后的授权功能将授予他们访问权限)

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