我想在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文件吗?你知道我该如何解决这个问题?
谢谢
答案 0 :(得分:0)
据我所知,目前在扩展程序中无法实现。
CKAN的授权体系结构的某些部分可以通过插件进行修改和扩展,例如,通过IAuthFunctions
,IAuthenticator
和IPermissionLabels
接口。但是,ckan.authz
中的角色是硬编码的。
您可以尝试使用IAuthFunctions
覆盖CKAN的内置身份验证功能,以创建类似的效果。特别是,您可以使用该方法从某些editor
成员中删除某些特权,使它们成为您要实现的“超级”用户。 (请注意,为member
用户添加特权可能 无效,因为即使修改的auth函数可以授予权限,这些用户也会根据其角色使检查失败他们访问)
这不会解决您的眼前问题,但我确实认为CKAN支持您尝试做的事情会很好。因此,我在CKAN的功能讨论跟踪器中创建了a ticket。随时向其中添加有关您的用例的更多信息。