У меня есть сайт CKAN, работающий с настроенным расширением ckanext-ldap, но я не хочу, чтобы только авторизованные пользователи имели доступ к сайту.
Это мое решение, но я не совсем доволен:
import ckan.plugins as plugins
import ckan.plugins.toolkit as toolkit
def site_read(context, data_dict):
# List of allowed paths, when not logged in
allowed_anon_paths = ['/user/login', '/ldap_login_handler']
# Prevent "site read" if the user is not logged in and the
# request path is not in the list of allowed anonymous paths
if not context.get('user') and toolkit.request.path not in allowed_anon_paths:
return {'success': False}
return {'success': True}
class Disable_Anon_AccessPlugin(plugins.SingletonPlugin):
plugins.implements(plugins.IAuthFunctions)
def get_auth_functions(self):
return {'site_read': site_read}
Он запрещает анонимным пользователям доступ к любым страницам (кроме связанных с входом в систему), но обеспечивает ошибку 403 Forbidden на всех страницах до входа в систему.
(также запросы API не выполняются с ошибкой 500, если вы не вошли в систему или не предоставили ключ API, но я могу жить с этим)
Я не могу найти способ перенаправления на страницу входа в систему, если он не вошел в систему и / или не работает функция "запомнить меня".
Добавление что-то вроде: toolkit.redirect_to ('/ user / login') вместо return {'success': False} не дает эффекта.
Я также изучил интерфейс IRoutes, но не могу понять, как получить текущего зарегистрированного пользователя (или проверить, вошел ли пользователь в систему)