#python #authentication #authorization #web-frameworks
#python #аутентификация #авторизация #веб-фреймворки
Вопрос:
Я пишу веб-приложение, и я хотел бы использовать repoze.what
amp; repoze.who
для обработки моей авторизации и аутентификации. Проблема в том, что repoze.what
кажется жестко запрограммированным для принятия определенной модели разрешений, то есть:
- Посетителями сайта являются либо зарегистрированные пользователи, либо анонимные.
- Учетные записи пользователей принадлежат к 0 или более группам.
- С группами связано 0 или более разрешений.
Так, например, вашими разрешениями могут быть ‘can-post-article’ и ‘can-post-comment’, а вашими группами могут быть ‘author’, ‘visitor’, где ‘author’ может как публиковать статьи, так и оставлять комментарии, в то время как посетители могут оставлять только комментарии.
Эта модель, вероятно, работает для большинства сайтов. Однако мой сайт позволяет командам сотрудничать друг с другом на разных уровнях. Итак, модель безопасности, которая мне нужна, это:
- Посетителями являются либо зарегистрированные пользователи, либо анонимные.
- Пользователи являются членами 0 или более групп.
- Для каждой группы, членом которой является пользователь, это членство будет иметь разные разрешения. Например, пользователь может быть «автором» или группой A, но «комментатором» в группе B.
Количество групп со временем будет меняться, и членство в этих группах также изменится. Я не вижу никакого простого способа интегрировать эту модель разрешений в repoze.what
. Я упускаю что-то очевидное?
Ответ №1:
Ну, вы могли бы легко создать группу «Group_A_commenter» и группу «Group_B_editor». Их не обязательно генерировать вручную. 🙂 Ваша модель на самом деле просто заключается в группировании групп.
Но вы также должны уметь создавать средства проверки предикатов, которые реализуют ваши правила.
http://what.repoze.org/docs/1.0/Manual/Predicates/index.html#term-predicate
Ответ №2:
После небольшой возни у меня есть ответ.
Ответ заключается в том, что единственная причина использовать схему аутентификации, предложенную в репозитории.в какой документации указано, что если вы это сделаете, вы сможете использовать их предикаты бесплатно. К счастью, написание и использование собственных предикатов — это проще простого. Мне кажется, что единственное жесткое требование — это пользовательский объект (хотя, очевидно, вы можете называть это как угодно). В моем приложении у меня есть куча пользовательских предикатов, которые проверяют определенные вещи, такие как:
- Является ли пользователь членом этой группы? (группа, указанная параметром)
- Пользователь вошел в систему?
- Выполняет ли пользователь эту конкретную роль сайта?
Затем я могу использовать эти предикаты везде, где захочу.