Как настроить файл authz.py в расширении CKAN?

Я хочу добавить новую роль в CKAN. И я могу сделать это в файле authz.py. Я определил новую роль и придал ей какое-то действие, и это сработало. Но я сделал это в базовом режиме. Я хочу сделать это в расширении. Поэтому я создал новое расширение под названием «customroles». И я скопировал authz.py из «/usr/lib/ckan/default/src/ckan/ckan» в пользовательскую папку «/usr/lib/ckan/default/src/ckanext-customroles/ckanext/customroles». Затем я добавил новую роль (Super), как вы можете видеть ниже.

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 в расширении? Вы знаете, как я могу решить эту проблему?

Спасибо,


person omery    schedule 18.09.2018    source источник


Ответы (1)


Насколько я знаю, в настоящее время это невозможно в расширении.

Некоторые части архитектуры авторизации CKAN можно изменять и расширять с помощью подключаемых модулей, например с помощью файла IAuthFunctions, IAuthenticator и IPermissionLabels. Однако роли в ckan.authz жестко закодированы.

Вы можете попробовать использовать IAuthFunctions для переопределения встроенных функций аутентификации CKAN для создания аналогичного эффекта. В частности, вы можете использовать этот подход для удаления некоторых привилегий у определенных editor членов, превращая их в "супер" пользователей, которых вы пытаетесь внедрить. (Обратите внимание, что добавление привилегий member пользователям, вероятно, не сработает, так как эти пользователи не пройдут проверку на основе их роли, даже если ваши модифицированные функции аутентификации предоставят им доступ)

Это не решит вашу насущную проблему, но я думаю, что было бы хорошо, если бы CKAN поддержал то, что вы пытаетесь сделать. Поэтому я создал билет в трекере обсуждений функций CKAN. . Не стесняйтесь добавлять к нему дополнительную информацию о вашем варианте использования.

person Florian Brucker    schedule 19.09.2018
comment
Суперпользователь и его привилегии были просто примером. Это не то, что я хочу создать. Я хочу создать разные роли с разными разрешениями. Поэтому изменение разрешения текущей роли мне не подходит. Мне нужно добавить новые роли. А также я добавил новые привилегии участнику в базовом коде (authz.py), и это сработало. - person omery; 20.09.2018
comment
Я понимаю. В этом случае вам нужно либо запустить исправленную версию CKAN, либо работать над поддержкой в ​​CKAN для изменения аутентификации через плагины. - person Florian Brucker; 21.09.2018