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

时间:2018-09-18 08:35:19

标签: python ckan

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

谢谢

1 个答案:

答案 0 :(得分:0)

据我所知,目前在扩展程序中无法实现。

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

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

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